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. Polymorphism ad hoc (OxFord)
2. Re: Polymorphism ad hoc (Arjun Comar)
3. Case vs Guards. I still don't know what is the difference
(Semih Masat)
4. Re: Case vs Guards. I still don't know what is the
difference (Semih Masat)
5. Re: Case vs Guards. I still don't know what is the
difference (Theodore Lief Gannon)
----------------------------------------------------------------------
Message: 1
Date: Wed, 6 Jul 2016 18:04:57 +0200
From: OxFord <[email protected]>
To: "[email protected]" <[email protected]>
Subject: [Haskell-beginners] Polymorphism ad hoc
Message-ID:
<CAPQ-+H+BqtKVWmNv78GGfUMq=zAk+85TA3w6h9ci=qm8ty8...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Hello,
why does haskell support only parametric polymorphism?
Is it because ad hoc p. || multiple dispatch is bad in general?
King Regards,
Ford
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.haskell.org/pipermail/beginners/attachments/20160706/36f34d9e/attachment-0001.html>
------------------------------
Message: 2
Date: Wed, 06 Jul 2016 16:19:37 +0000
From: Arjun Comar <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Polymorphism ad hoc
Message-ID:
<cadjrcrwr5kso1snjt_mobjtlyp5jo9axx72-llpydjy61ot...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Hi Ford,
Haskell does support ad-hoc polymorphism via type classes. In short,
class Foo a where
-- type declarations for related sets of functions that are polymorphic
in a go here
instance Foo Int where
-- function definitions with a specialized to Int go here.
The Show class is probably a fairly simple example you can play with in
ghci.
data Test = Test
instance Show Test where
-- show :: Test -> String
show t = "Hello World"
Thanks,
Arjun
On Wed, Jul 6, 2016 at 12:05 PM OxFord <[email protected]> wrote:
> Hello,
>
> why does haskell support only parametric polymorphism?
>
> Is it because ad hoc p. || multiple dispatch is bad in general?
>
>
> King Regards,
>
> Ford
> _______________________________________________
> 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/20160706/1e82699a/attachment-0001.html>
------------------------------
Message: 3
Date: Thu, 7 Jul 2016 03:43:42 +0300
From: Semih Masat <[email protected]>
To: [email protected]
Subject: [Haskell-beginners] Case vs Guards. I still don't know what
is the difference
Message-ID:
<cap7z+mlantj-0hc2tz1vqmuzzvemet2jxmarcqtdewrbtar...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Hello,
I am new to Haskell and trying to learn it with learnyouahaskell.com and
Pluralsight Haskell course.
And i have a very noob question.
I understand that *if .. else* is just a syntactic sugar over *case. *But
what about guards then ?
Are guards also *case *in different syntax ? Or vice versa ? Like with an
example.
anyEven nums
| (length (removeOdd nums)) > 0 = True
| otherwise = False
anyEven' nums = case (removeOdd nums) of
[] -> False
(x:xs) -> True
I can do the same thing with both of them.
As i understand the only different thing is, with *case *i can manipulate
the parameter (like here in the example i used removeOdd) and can use the
manipulated parameter to decide what to do after that.
So i will not need to use removeOdd function inside the case. ( maybe i
will need to use in every guard definition if i choose to use guards )
Is this it?
Is this the only difference between them ?
And if it is, why haskell needed do implement both of them. Can't we use
function like removeOdd before using it on case or guard functions ?
Thanks, and sorry if my english is bad.
Semih Masat
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.haskell.org/pipermail/beginners/attachments/20160707/2bacca53/attachment-0001.html>
------------------------------
Message: 4
Date: Thu, 7 Jul 2016 04:16:56 +0300
From: Semih Masat <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] Case vs Guards. I still don't know
what is the difference
Message-ID:
<cap7z+mj7ycp974ld51ppl9n-umgjja0zsyovybwrrvpuj1m...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Sorry, if i am flooding.
To make it clear what i wanted to say in last section on previous mail.
Lets say i have a list of numbers and i want to do different things in case
of different even numbers on that list.
If i use guards i will do it like this :
nums = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
howManyEvens = length(removeOdd(nums))
isItOk count
| count > 10 = "Too much"
| count > 8 = "Isn't this a little much?"
| count > 5 = "I think this is ok"
| count > 3 = "Little more please"
| count > 0 = "Ooo, cmon"
| otherwise = "We gonna die"
result = isItOk howManyEvens
This is a very stupid example but this will work i guess.
And if i wanted to this with *case* , i will do it like;
isItOk' nums = case (length(removeOdd(nums))) of
10 -> "Too much"
8 -> "Isn't this a little much?"
5 -> "I think this is ok"
3 -> "Little more please"
0 -> "Ooo, cmon"
x -> "i don't even"
So the only different thing is i didn't need to create *howManyEvens*
constant.
PS: While i writing this. I realized that with case, i need to use pattern
matching but with guards i can use other functions if i wanted to. ( like
count > 10 )
Sorry for asking prematurely. And if anyone reaches this email by google
search. Look at this explanation : http://stackoverflow.com/a/4156831
To the authors : Please, if you writing a book a blog post about haskell.
Don't create same function in different styles. We don't understand which
one we need to use and why we have all different choices.
Thanks.
Semih
On Thu, Jul 7, 2016 at 3:43 AM, Semih Masat <[email protected]> wrote:
> Hello,
>
> I am new to Haskell and trying to learn it with learnyouahaskell.com and
> Pluralsight Haskell course.
>
> And i have a very noob question.
>
> I understand that *if .. else* is just a syntactic sugar over *case. *But
> what about guards then ?
>
> Are guards also *case *in different syntax ? Or vice versa ? Like with an
> example.
>
>
> anyEven nums
> | (length (removeOdd nums)) > 0 = True
> | otherwise = False
>
>
> anyEven' nums = case (removeOdd nums) of
> [] -> False
> (x:xs) -> True
>
> I can do the same thing with both of them.
>
> As i understand the only different thing is, with *case *i can manipulate
> the parameter (like here in the example i used removeOdd) and can use the
> manipulated parameter to decide what to do after that.
> So i will not need to use removeOdd function inside the case. ( maybe i
> will need to use in every guard definition if i choose to use guards )
>
> Is this it?
>
> Is this the only difference between them ?
>
> And if it is, why haskell needed do implement both of them. Can't we use
> function like removeOdd before using it on case or guard functions ?
>
>
> Thanks, and sorry if my english is bad.
>
> Semih Masat
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.haskell.org/pipermail/beginners/attachments/20160707/c3b04427/attachment-0001.html>
------------------------------
Message: 5
Date: Wed, 6 Jul 2016 18:43:35 -0700
From: Theodore Lief Gannon <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Case vs Guards. I still don't know
what is the difference
Message-ID:
<cajopsubj9g__di9azm-rnpnhtrf0ti53v4zpmvt-weq9c67...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
One important feature of guards is that passing a pattern but failing all
the guards falls through to the next pattern. Toy example:
maybeGT5 x | x > 5 = Just x
maybeGT5 _ = Nothing
On Jul 6, 2016 6:17 PM, "Semih Masat" <[email protected]> wrote:
> Sorry, if i am flooding.
>
> To make it clear what i wanted to say in last section on previous mail.
>
>
>
> Lets say i have a list of numbers and i want to do different things in
> case of different even numbers on that list.
>
> If i use guards i will do it like this :
>
> nums = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
> howManyEvens = length(removeOdd(nums))
>
> isItOk count
> | count > 10 = "Too much"
> | count > 8 = "Isn't this a little much?"
> | count > 5 = "I think this is ok"
> | count > 3 = "Little more please"
> | count > 0 = "Ooo, cmon"
> | otherwise = "We gonna die"
>
> result = isItOk howManyEvens
>
> This is a very stupid example but this will work i guess.
>
> And if i wanted to this with *case* , i will do it like;
>
> isItOk' nums = case (length(removeOdd(nums))) of
> 10 -> "Too much"
> 8 -> "Isn't this a little much?"
> 5 -> "I think this is ok"
> 3 -> "Little more please"
> 0 -> "Ooo, cmon"
> x -> "i don't even"
>
> So the only different thing is i didn't need to create *howManyEvens*
> constant.
>
>
> PS: While i writing this. I realized that with case, i need to use pattern
> matching but with guards i can use other functions if i wanted to. ( like
> count > 10 )
> Sorry for asking prematurely. And if anyone reaches this email by google
> search. Look at this explanation : http://stackoverflow.com/a/4156831
>
> To the authors : Please, if you writing a book a blog post about haskell.
> Don't create same function in different styles. We don't understand which
> one we need to use and why we have all different choices.
>
> Thanks.
> Semih
>
> On Thu, Jul 7, 2016 at 3:43 AM, Semih Masat <[email protected]> wrote:
>
>> Hello,
>>
>> I am new to Haskell and trying to learn it with learnyouahaskell.com and
>> Pluralsight Haskell course.
>>
>> And i have a very noob question.
>>
>> I understand that *if .. else* is just a syntactic sugar over *case. *But
>> what about guards then ?
>>
>> Are guards also *case *in different syntax ? Or vice versa ? Like with
>> an example.
>>
>>
>> anyEven nums
>> | (length (removeOdd nums)) > 0 = True
>> | otherwise = False
>>
>>
>> anyEven' nums = case (removeOdd nums) of
>> [] -> False
>> (x:xs) -> True
>>
>> I can do the same thing with both of them.
>>
>> As i understand the only different thing is, with *case *i can
>> manipulate the parameter (like here in the example i used removeOdd) and
>> can use the manipulated parameter to decide what to do after that.
>> So i will not need to use removeOdd function inside the case. ( maybe i
>> will need to use in every guard definition if i choose to use guards )
>>
>> Is this it?
>>
>> Is this the only difference between them ?
>>
>> And if it is, why haskell needed do implement both of them. Can't we use
>> function like removeOdd before using it on case or guard functions ?
>>
>>
>> Thanks, and sorry if my english is bad.
>>
>> Semih Masat
>>
>
>
> _______________________________________________
> 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/20160706/219ee254/attachment.html>
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 97, Issue 4
****************************************