Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://www.haskell.org/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. Type signature question (Louis-Guillaume Gagnon)
2. Re: Type signature question (Matthew Lefavor)
3. Re: Type signature question (Brandon Allbery)
4. Re: Type signature question (Denis Kasak)
5. Re: Type signature question (Anindya Mozumdar)
6. Re: Type signature question (Erik Price)
7. Re: Type signature question (Erik Price)
----------------------------------------------------------------------
Message: 1
Date: Tue, 23 Jul 2013 10:33:35 -0400
From: Louis-Guillaume Gagnon <[email protected]>
To: [email protected]
Subject: [Haskell-beginners] Type signature question
Message-ID:
<CANCBZJuJqHUc2+=iupiclecmvuctstyxovyc3uo54m542pj...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
Hello beginners,
I'm working on the second set of exercises in ch.03 of Real World Haskell
I wrote a palindromize function (:: [a] -> [a]) which transforms a
list in a palindrome (eg. [1,2,3] -> [1,2,3,3,2,1]) .
I wrote a isPalindrome function which checks whether a given list is
such a palindrome.
it reads:
isPalindrome xs
| odd (length xs) = False
| firstHalf == secondHalf =True
| otherwise = False
where half = div (length xs) 2
firstHalf = take half xs
secondHalf = reverse (drop half xs)
I would expect the type signature to be:
isPalindrome :: [a] -> Bool
but ghci gives me
is Eq a => [a] -> Bool
and I don't undestand why the "Eq a =>" shows up.
many thanks,
glg
------------------------------
Message: 2
Date: Tue, 23 Jul 2013 10:44:12 -0400
From: Matthew Lefavor <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Type signature question
Message-ID:
<cajqezs3bpomk_obbe2rr-s2xiib+wisagobj1c8qls3yg7e...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
On Tue, Jul 23, 2013 at 10:33 AM, Louis-Guillaume Gagnon <
[email protected]> wrote:
> isPalindrome xs
> | odd (length xs) = False
> | firstHalf == secondHalf =True
> | otherwise = False
> where half = div (length xs) 2
> firstHalf = take half xs
> secondHalf = reverse (drop half xs)
>
> I would expect the type signature to be:
> isPalindrome :: [a] -> Bool
>
> but ghci gives me
> is Eq a => [a] -> Bool
>
> and I don't undestand why the "Eq a =>" shows up
>
"Eq a" is the "Type class" of "a". It means that "a" is a type that
supports the checking of equality.
Other type classes include: "Show" (types that are printable), and "Ord"
(types that are orderable).
Cheers,
MCL
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20130723/16c6787c/attachment-0001.html>
------------------------------
Message: 3
Date: Tue, 23 Jul 2013 10:46:48 -0400
From: Brandon Allbery <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Type signature question
Message-ID:
<CAKFCL4Xwj1kpvKc=i7zkvrewdhl--ycetppnt7twrx3p+gw...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
On Tue, Jul 23, 2013 at 10:33 AM, Louis-Guillaume Gagnon <
[email protected]> wrote:
> I wrote a isPalindrome function which checks whether a given list is
> such a palindrome.
> it reads:
> isPalindrome xs
> | odd (length xs) = False
> | firstHalf == secondHalf =True
> | otherwise = False
> where half = div (length xs) 2
> firstHalf = take half xs
> secondHalf = reverse (drop half xs)
>
> I would expect the type signature to be:
> isPalindrome :: [a] -> Bool
>
> but ghci gives me
> is Eq a => [a] -> Bool
>
> and I don't undestand why the "Eq a =>" shows up.
>
It shows up because of `firstHalf == secondHalf`; you used (==), this
requires an Eq constraint so that the type-appropriate implementation of
(==) is available.
--
brandon s allbery kf8nh sine nomine associates
[email protected] [email protected]
unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20130723/f8aa25d8/attachment-0001.html>
------------------------------
Message: 4
Date: Tue, 23 Jul 2013 16:48:21 +0200
From: Denis Kasak <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Type signature question
Message-ID:
<CANJrnZe=BMN68DZ766DGqAb7BVyg8GiXMy_qXBHz=w8kvrt...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8
On 23 July 2013 16:33, Louis-Guillaume Gagnon
<[email protected]> wrote:
>
> and I don't undestand why the "Eq a =>" shows up.
Prelude> :type (==)
(==) :: Eq a => a -> a -> Bool
The (==) operator is a member of the typeclass Eq. This enables many
different types to use the (==) operator by implementing their own
instance of Eq (i.e. their own version of the (==) function). Since
you're using the (==) operator in your code, the only types that can
typecheck are those that have an instance of the Eq typeclass. ghci
detects this and automatically adds the "Eq a =>" which is called a
/class constraint/. It restricts the type variable 'a' to only those
types that have an Eq instance defined.
--
Denis Kasak
------------------------------
Message: 5
Date: Tue, 23 Jul 2013 20:25:15 +0530
From: "Anindya Mozumdar" <[email protected]>
To: "'The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell'" <[email protected]>,
<[email protected]>
Subject: Re: [Haskell-beginners] Type signature question
Message-ID: <[email protected]>
Content-Type: text/plain; charset="us-ascii"
>>but ghci gives me
>>is Eq a => [a] -> Bool
>>
>>and I don't undestand why the "Eq a =>" shows up.
You are doing the comparison firstHalf == secondHalf. Two lists are equal
only if each element in the same position in the list are equal (and the
lists are of equal length). Thus, you require that the elements of the list
can be compared for equality. A type can be tested for equality only if it
belongs to the Eq typeclass. Thus, automatic type inference in Haskell is
putting this class constraint.
Regards,
Anindya
------------------------------
Message: 6
Date: Tue, 23 Jul 2013 10:57:52 -0400
From: Erik Price <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Type signature question
Message-ID:
<cad+x7c8qwsvsxfjn9uqtsgtkmpjznqmof3gsj5xdjqksg1r...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
It's saying that you can't pass parameters to this function unless they are
of the Eq type class, because somewhere in the body of the function is code
that expects parameters to be of this type class.
e
On Tue, Jul 23, 2013 at 10:33 AM, Louis-Guillaume Gagnon <
[email protected]> wrote:
> Hello beginners,
>
> I'm working on the second set of exercises in ch.03 of Real World Haskell
>
> I wrote a palindromize function (:: [a] -> [a]) which transforms a
> list in a palindrome (eg. [1,2,3] -> [1,2,3,3,2,1]) .
>
> I wrote a isPalindrome function which checks whether a given list is
> such a palindrome.
> it reads:
> isPalindrome xs
> | odd (length xs) = False
> | firstHalf == secondHalf =True
> | otherwise = False
> where half = div (length xs) 2
> firstHalf = take half xs
> secondHalf = reverse (drop half xs)
>
> I would expect the type signature to be:
> isPalindrome :: [a] -> Bool
>
> but ghci gives me
> is Eq a => [a] -> Bool
>
> and I don't undestand why the "Eq a =>" shows up.
>
> many thanks,
>
> glg
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20130723/9a604bba/attachment-0001.html>
------------------------------
Message: 7
Date: Tue, 23 Jul 2013 10:59:01 -0400
From: Erik Price <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Type signature question
Message-ID:
<CAD+X7c9tEy1F=AjS6Dbn07XWKyL8-YUfTA=kt8xfvhjuqyc...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
My reply is a bit ambiguous, so to clarify: the parameter doesn't have to
be of the Eq type class, because the parameter is a list. But the list's
elements have to be of the Eq type class.
e
On Tue, Jul 23, 2013 at 10:57 AM, Erik Price <[email protected]> wrote:
> It's saying that you can't pass parameters to this function unless they
> are of the Eq type class, because somewhere in the body of the function is
> code that expects parameters to be of this type class.
>
> e
>
>
> On Tue, Jul 23, 2013 at 10:33 AM, Louis-Guillaume Gagnon <
> [email protected]> wrote:
>
>> Hello beginners,
>>
>> I'm working on the second set of exercises in ch.03 of Real World Haskell
>>
>> I wrote a palindromize function (:: [a] -> [a]) which transforms a
>> list in a palindrome (eg. [1,2,3] -> [1,2,3,3,2,1]) .
>>
>> I wrote a isPalindrome function which checks whether a given list is
>> such a palindrome.
>> it reads:
>> isPalindrome xs
>> | odd (length xs) = False
>> | firstHalf == secondHalf =True
>> | otherwise = False
>> where half = div (length xs) 2
>> firstHalf = take half xs
>> secondHalf = reverse (drop half xs)
>>
>> I would expect the type signature to be:
>> isPalindrome :: [a] -> Bool
>>
>> but ghci gives me
>> is Eq a => [a] -> Bool
>>
>> and I don't undestand why the "Eq a =>" shows up.
>>
>> many thanks,
>>
>> glg
>>
>> _______________________________________________
>> Beginners mailing list
>> [email protected]
>> http://www.haskell.org/mailman/listinfo/beginners
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20130723/a2c672d4/attachment.html>
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 61, Issue 26
*****************************************