Send Beginners mailing list submissions to
        beginners@haskell.org

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
        beginners-requ...@haskell.org

You can reach the person managing the list at
        beginners-ow...@haskell.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1. Re:  Type unions (Tobias Brandt)
   2. Re:  Type unions (Hector Guilarte)
   3. Re:  Type unions (Hector Guilarte)
   4. Re:  Type unions (Tobias Brandt)
   5. Re:  Equivalence of Inheritance (Russ Abbott)


----------------------------------------------------------------------

Message: 1
Date: Tue, 14 Dec 2010 22:02:20 +0100
From: Tobias Brandt <tob.bra...@googlemail.com>
Subject: Re: [Haskell-beginners] Type unions
To: Hector Guilarte <hector...@gmail.com>
Cc: russ.abb...@gmail.com, beginners <beginners@haskell.org>
Message-ID:
        <aanlktikyguac=hnuwmscugbnhbunscw74-2bcd6jo...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

Woah, I was talking crap. Ignore my last post.

On 14 December 2010 21:56, Hector Guilarte <hector...@gmail.com> wrote:
> Hello,
> Nobody has explained you why that doesn't compile...
> Here's the deal
> Suppose you have a data A which has a?constructor?named B and a Int
>> data A = B Int
> now suppose you have a data C which has a?constructor?named A and a Int
>> data C = A Int
> that compiles because the name of your data type is different from
> the?constructor,
> that is, the names of the data types and the constructors they have are in
> different
> scopes, so for doing what you want, you would need to do:
>> data A =?Aconstructor?Int
>> data B =?Bconstructor?Int
>> data?AorB?= A A ?| B B
> Where the first A is a?constructor?named A and the second references a data
> type A,
> idem for B
> Hope that helps you,
> H?ctor Guilarte
> On Tue, Dec 14, 2010 at 3:39 PM, Russ Abbott <russ.abb...@gmail.com> wrote:
>>
>> Is there a way to get this to work?
>>
>> data A = Aconstructor Int
>> data B = Bconstructor Int
>> data AorB = A | B
>> f :: Int -> AorB
>> f x
>> ??| even x ? ? = Aconstructor x
>> ??| otherwise = Bconstructor x
>>
>> ?I get this diagnostic.
>>
>> Couldn't match expected type `AorB' against inferred type `A'
>>
>> Since AorB is A or B, why is this not permitted?
>> If instead I write
>>
>> data AorB = Aconstructor Int | Bconstructor Int
>>
>> everything works out ok. But what if I want separate types for A and B?
>> Thanks,
>> -- Russ
>> _______________________________________________
>> Beginners mailing list
>> Beginners@haskell.org
>> http://www.haskell.org/mailman/listinfo/beginners
>>
>
>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>



------------------------------

Message: 2
Date: Tue, 14 Dec 2010 16:32:27 -0430
From: Hector Guilarte <hector...@gmail.com>
Subject: Re: [Haskell-beginners] Type unions
To: Tobias Brandt <tob.bra...@googlemail.com>
Cc: russ.abb...@gmail.com, beginners <beginners@haskell.org>
Message-ID:
        <aanlktikjlr-5usa4dvthytfl9vgmx2hpjlz9j7pqh...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Tobias you replied at the same time I was answering, you did explained what
is happening,
however, you said something which isn't right. As I mentioned before, "Type
Constructors" and
"Value Constructors" are in different scopes, and so, their names can be
used again...

if you don't believe me, give it a try with this example. I didn't even try
it, but I asure you it
will compile without any trouble:

data A = C Int
data B = D Int

data AorB = A A | B B

Greeting,

H?ctor Guilarte

On Tue, Dec 14, 2010 at 4:22 PM, Tobias Brandt <tob.bra...@googlemail.com>wrote:

> On 14 December 2010 21:44, Russ Abbott <russ.abb...@gmail.com> wrote:
> > What's confusing is that
> >
> >
> > data AorB = A | B
> >
> > compiles with error.
> > That raises the question of what it really means!
>
> You have to distinguish between type and value constructors.
> On the left hand side of a data declaration you have
> a type constructor (AorB) and possibly some type variables.
> On the right hand side you have value constructors followed
> by their arguments (types or type variables). E.g.:
>
> data TypeConstr a b c = ValueConstr1 a b | ValueConstr2 c | ValueConstr3
> Int
>
> But in your example A and B were already declared as type
> constructors, so they can't be used again as value constructors.
> That's why you get an error. If you remove
>
> data A = ...
> and
> data B = ...
>
> then
>
> data AorB = A | B
>
> compiles.
>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20101214/f143a278/attachment-0001.htm>

------------------------------

Message: 3
Date: Tue, 14 Dec 2010 16:33:31 -0430
From: Hector Guilarte <hector...@gmail.com>
Subject: Re: [Haskell-beginners] Type unions
To: Tobias Brandt <tob.bra...@googlemail.com>
Cc: russ.abb...@gmail.com, beginners <beginners@haskell.org>
Message-ID:
        <aanlktik87le+1z6-bah0g1horte3d9qyknlu4-0v_...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Hahaha don't worry man,

Hope it helps for you too

On Tue, Dec 14, 2010 at 4:32 PM, Tobias Brandt <tob.bra...@googlemail.com>wrote:

> Woah, I was talking crap. Ignore my last post.
>
> On 14 December 2010 21:56, Hector Guilarte <hector...@gmail.com> wrote:
> > Hello,
> > Nobody has explained you why that doesn't compile...
> > Here's the deal
> > Suppose you have a data A which has a constructor named B and a Int
> >> data A = B Int
> > now suppose you have a data C which has a constructor named A and a Int
> >> data C = A Int
> > that compiles because the name of your data type is different from
> > the constructor,
> > that is, the names of the data types and the constructors they have are
> in
> > different
> > scopes, so for doing what you want, you would need to do:
> >> data A = Aconstructor Int
> >> data B = Bconstructor Int
> >> data AorB = A A  | B B
> > Where the first A is a constructor named A and the second references a
> data
> > type A,
> > idem for B
> > Hope that helps you,
> > H?ctor Guilarte
> > On Tue, Dec 14, 2010 at 3:39 PM, Russ Abbott <russ.abb...@gmail.com>
> wrote:
> >>
> >> Is there a way to get this to work?
> >>
> >> data A = Aconstructor Int
> >> data B = Bconstructor Int
> >> data AorB = A | B
> >> f :: Int -> AorB
> >> f x
> >>   | even x     = Aconstructor x
> >>   | otherwise = Bconstructor x
> >>
> >>  I get this diagnostic.
> >>
> >> Couldn't match expected type `AorB' against inferred type `A'
> >>
> >> Since AorB is A or B, why is this not permitted?
> >> If instead I write
> >>
> >> data AorB = Aconstructor Int | Bconstructor Int
> >>
> >> everything works out ok. But what if I want separate types for A and B?
> >> Thanks,
> >> -- Russ
> >> _______________________________________________
> >> Beginners mailing list
> >> Beginners@haskell.org
> >> http://www.haskell.org/mailman/listinfo/beginners
> >>
> >
> >
> > _______________________________________________
> > Beginners mailing list
> > Beginners@haskell.org
> > http://www.haskell.org/mailman/listinfo/beginners
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20101214/a65586cf/attachment-0001.htm>

------------------------------

Message: 4
Date: Tue, 14 Dec 2010 22:04:31 +0100
From: Tobias Brandt <tob.bra...@googlemail.com>
Subject: Re: [Haskell-beginners] Type unions
To: Hector Guilarte <hector...@gmail.com>
Cc: russ.abb...@gmail.com, beginners <beginners@haskell.org>
Message-ID:
        <aanlktinb1hinaaxoxzdpy2emhskxmobxomaq3bm30...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

On 14 December 2010 22:02, Hector Guilarte <hector...@gmail.com> wrote:
> Tobias you replied at the same time I was answering, you did explained what
> is happening,
> however, you said something which isn't right. As I mentioned before, "Type
> Constructors" and
> "Value Constructors" are in different scopes, and so, their names can be
> used again...
> if you don't believe me, give it a try with this example.

I believe you. As I said, I was talking crap :-)



------------------------------

Message: 5
Date: Tue, 14 Dec 2010 13:06:37 -0800
From: Russ Abbott <russ.abb...@gmail.com>
Subject: Re: [Haskell-beginners] Equivalence of Inheritance
To: Michael Katelman <katel...@uiuc.edu>
Cc: beginners <beginners@haskell.org>
Message-ID:
        <aanlktingxfp+pyh_gh2+u33m0hm4yewhtdz+emdyt...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"

That's good. (It's more or less the way I was doing it.)  What I wanted to
avoid was this.

getGenderSpecificCondition (  Man _ _ cond) = cond
getGenderSpecificCondition (Woman _ _ cond) = cond


I know it seems like a small thing, but I would like to be able to write it
like this.

getGenderSpecificCondition p
   | p == (Man _ _ cond) = cond
   | p == (Woman _ _ cond) = cond

But that's not legal syntax.  A pattern can't appear in that context. But
this does the job.

getGenderSpecificCondition :: Person -> Condition
getGenderSpecificCondition p
   | isMan p = prostateCondition p
   | isWoman p = ovaryCondition p

isMan (     Man _ _ cond) = True
isMan _ = False
isWoman (Woman _ _ cond) = True
isWoman _ = False

That works! prostateCondition and ovaryCondition are both defined on Person.
(I'm surprised to see that.)

*Person> Group [Man "Harry" 32 OK, Woman "Sally" 29 Good]
Harry(32, OK)
Sally(29, Good)

Also


*Person> prostateCondition (Woman "Sally" 29 Good)
*** Exception: No match in record selector prostateCondition
*Person> prostateCondition (Man "Harry" 29 Good)
Good


*-- Russ *
*
*


On Tue, Dec 14, 2010 at 12:31 PM, Michael Katelman <katel...@uiuc.edu>wrote:

> Perhaps this?
>
> https://gist.github.com/741048
>
> -Mike
>
> On Tue, Dec 14, 2010 at 2:27 PM, Russ Abbott <russ.abb...@gmail.com>
> wrote:
> > What I'm after is a version of my example that compiles.  Can you make
> one?
> >
> > -- Russ
> >
> >
> > On Tue, Dec 14, 2010 at 12:18 PM, Antoine Latter <aslat...@gmail.com>
> wrote:
> >>
> >> Sorry, I really don't know enough about what you're after to attempt
> that.
> >>
> >> But you'll need to change you're signatures of the form:
> >>
> >> > function :: Person -> Foo
> >>
> >> to something of the form:
> >>
> >> > function :: Person p => p -> Foo
> >>
> >> Because again, a type class can not be used as a type.
> >>
> >> Antoine
> >>
> >> On Tue, Dec 14, 2010 at 2:12 PM, Russ Abbott <russ.abb...@gmail.com>
> >> wrote:
> >> > What got fouled up is all the adjustments I had to make to the other
> >> > declarations.
> >> > Can you complete the example so that it compiles using
> >> >
> >> > class Person p where ...
> >> >
> >> > I'd very much like to see an example that actually compiles.
> >> >
> >> > Thanks.
> >> > -- Russ
> >> >
> >> > On Tue, Dec 14, 2010 at 11:58 AM, Antoine Latter <aslat...@gmail.com>
> >> > wrote:
> >> >>
> >> >> On Tue, Dec 14, 2010 at 1:52 PM, Russ Abbott <russ.abb...@gmail.com>
> >> >> wrote:
> >> >> > If gender is a field in a Person type, then a Person must have both
> >> >> > an
> >> >> > ovaryCondition and a prostateCondition.  That seems awkward.
> >> >> > Regarding
> >> >> >      class Person p where
> >> >> > I started down that path but got completely fouled up.
> >> >>
> >> >> How did this get fouled up? Every class declaration must take
> >> >> arguments - here, 'p' is the argument for the class.
> >> >>
> >> >> Thanks,
> >> >> Antoine
> >> >
> >> >
> >
> >
> > _______________________________________________
> > Beginners mailing list
> > Beginners@haskell.org
> > http://www.haskell.org/mailman/listinfo/beginners
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20101214/f6061f52/attachment.htm>

------------------------------

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners


End of Beginners Digest, Vol 30, Issue 27
*****************************************

Reply via email to