[Haskell-beginners] Two type declarations

Sylvain Henry sylvain at haskus.fr
Wed Mar 28 18:33:56 UTC 2018


Indeed "Int b" is not a valid constraint: the kind of "Int" is Type (or 
"*") as GHC reports:

 > Expecting one fewer arguments to ‘Int’
 > Expected kind ‘* -> Constraint’, but ‘Int’ has kind ‘*’

A valid constraint would be "Int ~ b" as in the following example. But I 
don't see why you would do this in this case, especially if you are 
beginning with Haskell. It complicates the code for no gain.

{-# LANGUAGE TypeFamilies #-}

elementAt'''' ::(Int ~ b)=>[a]-> b ->a -- #2
elementAt'''' [] _= error "list is empty"
elementAt'''' list index
    | (index < 1) = error "index has to be positive number"
    | otherwise= list !! (index-1)


Cheers
Sylvain


On 28/03/2018 20:19, Justin Thong wrote:
> What is the difference between these two type declarations? The second 
> one is wrong but I can't convince myself why it should be wrong. Is it 
> because /Int /not a constraint class and it is only an instance of 
> one? My curiousity is why #1 can't be written in the form of #2. I 
> apologise if I am using wrong terminology as type, class and 
> constraint class are used with not much distinction. To add context, 
> this problem is to find a function that will find an element by 
> passing in a list and an index argument.
>
> elementAt''' ::[a]-> Int ->a -- #1
> elementAt''' [] _= error "list is empty"
> elementAt''' list index
> | (index < 1) = error "index has to be positive number"
> | otherwise= list !! (index-1)
>
> elementAt'''' ::(Int b)=>[a]-> b ->a -- #2
> elementAt'''' [] _= error "list is empty"
> elementAt'''' list index
> | (index < 1) = error "index has to be positive number"
> | otherwise= list !! (index-1)
>
> Thank you. I just began learning Haskell.
>
>
> Yours sincerely,
> Justin
>
> /I check my email at 9AM and 4PM everyday/
> /If you have an *EMERGENCY*, contact me at +447938674419(UK) or 
> +60125056192(Malaysia)/
>
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20180328/151e225a/attachment.html>


More information about the Beginners mailing list