why does the superclass not work?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

why does the superclass not work?

Alexander Chen
Hi,

superclass.hs

myX = 1 :: Int

sigmund  :: Int -> Int 
sigmund x = myX


prelude> :l superclass.hs
[1 of 1] Compiling Main 
Ok, one module loaded.

==================================================================================

superclass.hs

myX = 1 :: Int

sigmund  :: Num -> Num 
sigmund x = myX

prelude> :l superclass.hs
typed_checked.hs:3:13: error:
    • Expecting one more argument to ‘Num’
      Expected a type, but ‘Num’ has kind ‘* -> Constraint’
    • In the type signature: sigmund :: Num -> Num
  |
3 | sigmund  :: Num -> Num    |             ^^^

typed_checked.hs:3:20: error:
    • Expecting one more argument to ‘Num’
      Expected a type, but ‘Num’ has kind ‘* -> Constraint’
    • In the type signature: sigmund :: Num -> Num


===================================================================================

I would think since Num is a superclass of Int defining the type in the superclass would be OK, also in the error message it refers to (see black) what does that refer to?

thanks!



_______________________________________________
Beginners mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: why does the superclass not work?

Mihai Maruseac
Hi.

Num is not a superclass of Int. Int is a type whereas Num is a type of a type.

The fix would be

sigmund :: Num a => a -> a
...

This signature means "sigmund has type a to a where a is constrained
to be a type variable of type Num" (so Num is the type of the type
variable a)

On Wed, Apr 29, 2020 at 12:41 PM Alexander Chen <[hidden email]> wrote:

>
> Hi,
>
> superclass.hs
>
> myX = 1 :: Int
>
> sigmund  :: Int -> Int
> sigmund x = myX
>
>
> prelude> :l superclass.hs
> [1 of 1] Compiling Main
> Ok, one module loaded.
>
> ==================================================================================
>
> superclass.hs
>
> myX = 1 :: Int
>
> sigmund  :: Num -> Num
> sigmund x = myX
>
> prelude> :l superclass.hs
> typed_checked.hs:3:13: error:
>     • Expecting one more argument to ‘Num’
>       Expected a type, but ‘Num’ has kind ‘* -> Constraint’
>     • In the type signature: sigmund :: Num -> Num
>   |
> 3 | sigmund  :: Num -> Num    |             ^^^
>
> typed_checked.hs:3:20: error:
>     • Expecting one more argument to ‘Num’
>       Expected a type, but ‘Num’ has kind ‘* -> Constraint’
>     • In the type signature: sigmund :: Num -> Num
>
>
> ===================================================================================
>
> I would think since Num is a superclass of Int defining the type in the superclass would be OK, also in the error message it refers to (see black) what does that refer to?
>
> thanks!
>
>
> _______________________________________________
> Beginners mailing list
> [hidden email]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners



--
Mihai Maruseac (MM)
"If you can't solve a problem, then there's an easier problem you can
solve: find it." -- George Polya
_______________________________________________
Beginners mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners