Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. Two type declarations (Justin Thong)
2. Re: Two type declarations (Sylvain Henry)
----------------------------------------------------------------------
Message: 1
Date: Wed, 28 Mar 2018 14:19:35 -0400
From: Justin Thong <[email protected]>
To: [email protected]
Subject: [Haskell-beginners] Two type declarations
Message-ID:
<CAEtAGerrqzKtfwh5P=ovzj98crqpvquwcup2hug_j09k1d3...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
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)*
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.haskell.org/pipermail/beginners/attachments/20180328/5856e98c/attachment-0001.html>
------------------------------
Message: 2
Date: Wed, 28 Mar 2018 20:33:56 +0200
From: Sylvain Henry <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] Two type declarations
Message-ID: <[email protected]>
Content-Type: text/plain; charset="utf-8"; Format="flowed"
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
> [email protected]
> 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-0001.html>
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 117, Issue 16
******************************************