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:  Re: Boilerplate Code (Kyle Murphy)
   2. Re:  Re: Boilerplate Code (Kyle Murphy)
   3. Re:  Re: Boilerplate Code (Ozgur Akgun)


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

Message: 1
Date: Tue, 3 Aug 2010 14:42:03 -0400
From: Kyle Murphy <orc...@gmail.com>
Subject: Re: [Haskell-beginners] Re: Boilerplate Code
To: Alex Rozenshteyn <rpglove...@gmail.com>
Cc: Christian Maeder <christian.mae...@dfki.de>, beginners@haskell.org
Message-ID:
        <aanlktimd8d6nmaemvias5p0_1rjlccjj14jd_qkho...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Actually looking at the original question I'm not sure my code does what was
intended. I was looking at does some type (a b) == (a c), which wasn't
exactly the question. Oh well, back to the drawing board.

-R. Kyle Murphy
--
Curiosity was framed, Ignorance killed the cat.


On Tue, Aug 3, 2010 at 14:38, Kyle Murphy <orc...@gmail.com> wrote:

> Less of a dirty dirty hack (requires that SchemeVal be an instance of
> Typeable):
>
> import Data.Typeable
> import Data.Maybe
>
> typeChecker :: (Typeable a, Typeable b) => a -> b -> Bool
> typeChecker a b = f a == f b
>         where
>                 f :: (Typeable a) => a -> Maybe TypeRep
>                 f = listToMaybe . typeRepArgs . typeOf
>
>
> -R. Kyle Murphy
> --
> Curiosity was framed, Ignorance killed the cat.
>
>
>
> On Tue, Aug 3, 2010 at 13:51, Alex Rozenshteyn <rpglove...@gmail.com>wrote:
>
>> That is a dirty, dirty hack.
>>
>>
>> On Tue, Aug 3, 2010 at 8:45 PM, Christian Maeder <
>> christian.mae...@dfki.de> wrote:
>>
>>> Matt Andrew schrieb:
>>> > Hi all,
>>> >
>>> > I am in the process of writing a Scheme interpreter/compiler in Haskell
>>> as my first serious project after learning the basics of Haskell. The goal
>>> is to really get a feel for Haskell. I am trying to accomplish this as much
>>> as I can on my own, but am referring to Jonathan Tang's 'Write Yourself a
>>> Scheme in 48 hours' whenever I get really stuck.
>>> >
>>> > I have a question regarding a pattern that I have found within my code
>>> for which I cannot seem to find an abstraction.
>>> >
>>> > I am implementing some of the primitive Scheme type-checker functions
>>> with the following code:
>>> >
>>> > numberP :: SchemeVal -> SchemeVal
>>> > numberP (Number _) = Bool True
>>> > numberP _          = Bool False
>>> >
>>> > boolP :: SchemeVal -> SchemeVal
>>> > boolP (Bool _) = Bool True
>>> > boolP _        = Bool False
>>> >
>>> > symbolP :: SchemeVal -> SchemeVal
>>> > symbolP (Atom _) = Bool True
>>> > symbolP _        = Bool False
>>> >
>>> > This is a pattern that I could easily provide an abstraction for with a
>>> Lisp macro, but I'm having trouble discovering if/how it's possible to do so
>>> elegantly in Haskell. The closest (but obviously incorrect) code to what I'm
>>> trying to accomplish would be:
>>> >
>>> > typeChecker :: SchemeVal -> SchemeVal -> SchemeVal
>>> > typeChecker (cons _) (cons2 _) = Bool $ cons == cons2
>>> >
>>> > I understand this code drastically misunderstands how pattern matching
>>> works, but (hopefully) it expresses what I'm trying to accomplish. Anyone
>>> have any suggestions?
>>>
>>> typeChecker s1 s2 = let f = takeWhile isAlphaNum . show in
>>>   Bool $ f s1 == f s2
>>>
>>> hoping that my "f" just extracts the constructor as string.
>>>
>>> C.
>>>
>>> > I do realise that such an abstraction is barely worth it for the amount
>>> of code it will save, but this exercise is about learning the ins and outs
>>> of Haskell.
>>> >
>>> > Appreciate you taking the time to read this,
>>> >
>>> > Matt Andrew
>>> _______________________________________________
>>> Beginners mailing list
>>> Beginners@haskell.org
>>> http://www.haskell.org/mailman/listinfo/beginners
>>>
>>
>>
>>
>> --
>> ()  ascii ribbon campaign - against html e-mail
>> /\  www.asciiribbon.org   - against proprietary attachments
>>
>>           Alex R
>>
>>
>> _______________________________________________
>> 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/20100803/c98bc450/attachment-0001.html

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

Message: 2
Date: Tue, 3 Aug 2010 14:50:41 -0400
From: Kyle Murphy <orc...@gmail.com>
Subject: Re: [Haskell-beginners] Re: Boilerplate Code
To: Alex Rozenshteyn <rpglove...@gmail.com>
Cc: Christian Maeder <christian.mae...@dfki.de>, beginners@haskell.org
Message-ID:
        <aanlktikv0jfiqbsy2jb0rk07ep=nfp0uo8=c3bmrm...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

I was close, this actually does what was asked:

import Data.Data

typeChecker :: (Typeable a, Typeable b, Data a, Data b) => a -> b -> Bool
typeChecker a b = toConstr a == toConstr b

-R. Kyle Murphy
--
Curiosity was framed, Ignorance killed the cat.


On Tue, Aug 3, 2010 at 14:42, Kyle Murphy <orc...@gmail.com> wrote:

> Actually looking at the original question I'm not sure my code does what
> was intended. I was looking at does some type (a b) == (a c), which wasn't
> exactly the question. Oh well, back to the drawing board.
>
>
> -R. Kyle Murphy
> --
> Curiosity was framed, Ignorance killed the cat.
>
>
> On Tue, Aug 3, 2010 at 14:38, Kyle Murphy <orc...@gmail.com> wrote:
>
>> Less of a dirty dirty hack (requires that SchemeVal be an instance of
>> Typeable):
>>
>> import Data.Typeable
>> import Data.Maybe
>>
>> typeChecker :: (Typeable a, Typeable b) => a -> b -> Bool
>> typeChecker a b = f a == f b
>>         where
>>                 f :: (Typeable a) => a -> Maybe TypeRep
>>                 f = listToMaybe . typeRepArgs . typeOf
>>
>>
>> -R. Kyle Murphy
>> --
>> Curiosity was framed, Ignorance killed the cat.
>>
>>
>>
>> On Tue, Aug 3, 2010 at 13:51, Alex Rozenshteyn <rpglove...@gmail.com>wrote:
>>
>>> That is a dirty, dirty hack.
>>>
>>>
>>> On Tue, Aug 3, 2010 at 8:45 PM, Christian Maeder <
>>> christian.mae...@dfki.de> wrote:
>>>
>>>> Matt Andrew schrieb:
>>>> > Hi all,
>>>> >
>>>> > I am in the process of writing a Scheme interpreter/compiler in
>>>> Haskell as my first serious project after learning the basics of Haskell.
>>>> The goal is to really get a feel for Haskell. I am trying to accomplish 
>>>> this
>>>> as much as I can on my own, but am referring to Jonathan Tang's 'Write
>>>> Yourself a Scheme in 48 hours' whenever I get really stuck.
>>>> >
>>>> > I have a question regarding a pattern that I have found within my code
>>>> for which I cannot seem to find an abstraction.
>>>> >
>>>> > I am implementing some of the primitive Scheme type-checker functions
>>>> with the following code:
>>>> >
>>>> > numberP :: SchemeVal -> SchemeVal
>>>> > numberP (Number _) = Bool True
>>>> > numberP _          = Bool False
>>>> >
>>>> > boolP :: SchemeVal -> SchemeVal
>>>> > boolP (Bool _) = Bool True
>>>> > boolP _        = Bool False
>>>> >
>>>> > symbolP :: SchemeVal -> SchemeVal
>>>> > symbolP (Atom _) = Bool True
>>>> > symbolP _        = Bool False
>>>> >
>>>> > This is a pattern that I could easily provide an abstraction for with
>>>> a Lisp macro, but I'm having trouble discovering if/how it's possible to do
>>>> so elegantly in Haskell. The closest (but obviously incorrect) code to what
>>>> I'm trying to accomplish would be:
>>>> >
>>>> > typeChecker :: SchemeVal -> SchemeVal -> SchemeVal
>>>> > typeChecker (cons _) (cons2 _) = Bool $ cons == cons2
>>>> >
>>>> > I understand this code drastically misunderstands how pattern matching
>>>> works, but (hopefully) it expresses what I'm trying to accomplish. Anyone
>>>> have any suggestions?
>>>>
>>>> typeChecker s1 s2 = let f = takeWhile isAlphaNum . show in
>>>>   Bool $ f s1 == f s2
>>>>
>>>> hoping that my "f" just extracts the constructor as string.
>>>>
>>>> C.
>>>>
>>>> > I do realise that such an abstraction is barely worth it for the
>>>> amount of code it will save, but this exercise is about learning the ins 
>>>> and
>>>> outs of Haskell.
>>>> >
>>>> > Appreciate you taking the time to read this,
>>>> >
>>>> > Matt Andrew
>>>> _______________________________________________
>>>> Beginners mailing list
>>>> Beginners@haskell.org
>>>> http://www.haskell.org/mailman/listinfo/beginners
>>>>
>>>
>>>
>>>
>>> --
>>> ()  ascii ribbon campaign - against html e-mail
>>> /\  www.asciiribbon.org   - against proprietary attachments
>>>
>>>           Alex R
>>>
>>>
>>> _______________________________________________
>>> 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/20100803/c9dde58c/attachment-0001.html

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

Message: 3
Date: Tue, 3 Aug 2010 20:01:35 +0100
From: Ozgur Akgun <ozgurak...@gmail.com>
Subject: Re: [Haskell-beginners] Re: Boilerplate Code
To: Kyle Murphy <orc...@gmail.com>
Cc: Christian Maeder <christian.mae...@dfki.de>, beginners@haskell.org
Message-ID:
        <aanlkti=geqm9h3mtf2rh4t2yw-xb84a4nfbne2enz...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Why do you need them to be Typeable? toConstr has the following type:

toConstr :: (Data a) => a -> Constr

Best,

On 3 August 2010 19:50, Kyle Murphy <orc...@gmail.com> wrote:

> I was close, this actually does what was asked:
>
> import Data.Data
>
> typeChecker :: (Typeable a, Typeable b, Data a, Data b) => a -> b -> Bool
> typeChecker a b = toConstr a == toConstr b
>
>
> -R. Kyle Murphy
> --
> Curiosity was framed, Ignorance killed the cat.
>
>
> On Tue, Aug 3, 2010 at 14:42, Kyle Murphy <orc...@gmail.com> wrote:
>
>> Actually looking at the original question I'm not sure my code does what
>> was intended. I was looking at does some type (a b) == (a c), which wasn't
>> exactly the question. Oh well, back to the drawing board.
>>
>>
>> -R. Kyle Murphy
>> --
>> Curiosity was framed, Ignorance killed the cat.
>>
>>
>> On Tue, Aug 3, 2010 at 14:38, Kyle Murphy <orc...@gmail.com> wrote:
>>
>>> Less of a dirty dirty hack (requires that SchemeVal be an instance of
>>> Typeable):
>>>
>>> import Data.Typeable
>>> import Data.Maybe
>>>
>>> typeChecker :: (Typeable a, Typeable b) => a -> b -> Bool
>>> typeChecker a b = f a == f b
>>>         where
>>>                 f :: (Typeable a) => a -> Maybe TypeRep
>>>                 f = listToMaybe . typeRepArgs . typeOf
>>>
>>>
>>> -R. Kyle Murphy
>>> --
>>> Curiosity was framed, Ignorance killed the cat.
>>>
>>>
>>>
>>> On Tue, Aug 3, 2010 at 13:51, Alex Rozenshteyn <rpglove...@gmail.com>wrote:
>>>
>>>> That is a dirty, dirty hack.
>>>>
>>>>
>>>> On Tue, Aug 3, 2010 at 8:45 PM, Christian Maeder <
>>>> christian.mae...@dfki.de> wrote:
>>>>
>>>>> Matt Andrew schrieb:
>>>>> > Hi all,
>>>>> >
>>>>> > I am in the process of writing a Scheme interpreter/compiler in
>>>>> Haskell as my first serious project after learning the basics of Haskell.
>>>>> The goal is to really get a feel for Haskell. I am trying to accomplish 
>>>>> this
>>>>> as much as I can on my own, but am referring to Jonathan Tang's 'Write
>>>>> Yourself a Scheme in 48 hours' whenever I get really stuck.
>>>>> >
>>>>> > I have a question regarding a pattern that I have found within my
>>>>> code for which I cannot seem to find an abstraction.
>>>>> >
>>>>> > I am implementing some of the primitive Scheme type-checker functions
>>>>> with the following code:
>>>>> >
>>>>> > numberP :: SchemeVal -> SchemeVal
>>>>> > numberP (Number _) = Bool True
>>>>> > numberP _          = Bool False
>>>>> >
>>>>> > boolP :: SchemeVal -> SchemeVal
>>>>> > boolP (Bool _) = Bool True
>>>>> > boolP _        = Bool False
>>>>> >
>>>>> > symbolP :: SchemeVal -> SchemeVal
>>>>> > symbolP (Atom _) = Bool True
>>>>> > symbolP _        = Bool False
>>>>> >
>>>>> > This is a pattern that I could easily provide an abstraction for with
>>>>> a Lisp macro, but I'm having trouble discovering if/how it's possible to 
>>>>> do
>>>>> so elegantly in Haskell. The closest (but obviously incorrect) code to 
>>>>> what
>>>>> I'm trying to accomplish would be:
>>>>> >
>>>>> > typeChecker :: SchemeVal -> SchemeVal -> SchemeVal
>>>>> > typeChecker (cons _) (cons2 _) = Bool $ cons == cons2
>>>>> >
>>>>> > I understand this code drastically misunderstands how pattern
>>>>> matching works, but (hopefully) it expresses what I'm trying to 
>>>>> accomplish.
>>>>> Anyone have any suggestions?
>>>>>
>>>>> typeChecker s1 s2 = let f = takeWhile isAlphaNum . show in
>>>>>   Bool $ f s1 == f s2
>>>>>
>>>>> hoping that my "f" just extracts the constructor as string.
>>>>>
>>>>> C.
>>>>>
>>>>> > I do realise that such an abstraction is barely worth it for the
>>>>> amount of code it will save, but this exercise is about learning the ins 
>>>>> and
>>>>> outs of Haskell.
>>>>> >
>>>>> > Appreciate you taking the time to read this,
>>>>> >
>>>>> > Matt Andrew
>>>>> _______________________________________________
>>>>> Beginners mailing list
>>>>> Beginners@haskell.org
>>>>> http://www.haskell.org/mailman/listinfo/beginners
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> ()  ascii ribbon campaign - against html e-mail
>>>> /\  www.asciiribbon.org   - against proprietary attachments
>>>>
>>>>           Alex R
>>>>
>>>>
>>>> _______________________________________________
>>>> 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
>
>


-- 
Ozgur Akgun
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
http://www.haskell.org/pipermail/beginners/attachments/20100803/e541a1ca/attachment.html

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

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


End of Beginners Digest, Vol 26, Issue 6
****************************************

Reply via email to