[Haskell-cafe] When using Cereal, what is the right way to write `get` for multi-constructor type?

Ivan Lazar Miljenovic ivan.miljenovic at gmail.com
Tue Apr 26 08:31:57 UTC 2016


On 26 April 2016 at 18:10, Magicloud Magiclouds
<magicloud.magiclouds at gmail.com> wrote:
> OK. So my understanding is there is no better (good-looking) code. Thank you
> all.

The only other thing I can think of is that if you use the
DeriveGeneric extension to derive an instance of Generic for your
class, then you can do just "instance Serialize STH" and the get and
put instances will be defined for you.  This doesn't work if you want
custom/specified values for your constructors though.

>
> William Yager <will.yager at gmail.com>于2016年4月26日周二 下午4:03写道:
>>
>> You may also want to use the Lambda-case extension. It will allow you to
>> elide the declaration of i.
>>
>> --Will Yager
>>
>> On Tue, Apr 26, 2016 at 1:24 AM, Ivan Lazar Miljenovic
>> <ivan.miljenovic at gmail.com> wrote:
>>>
>>> On 26 April 2016 at 15:39, Magicloud Magiclouds
>>> <magicloud.magiclouds at gmail.com> wrote:
>>> > Hi,
>>> > Say I have code already like:
>>> > data STH = A
>>> >         | B
>>> >         | C
>>> > instance Serialize STH where
>>> >   put A = putWord8 1
>>> >   put B = putWord8 66
>>> >   put C = putWord8 111
>>> >
>>> > Then what is the better way to do `get`? Is following the only one?
>>> > get = do
>>> >   i <- getWord8
>>> >   case i of
>>> >     1 -> return A
>>> >     66 -> return B
>>> >     111 -> return C
>>>
>>> I think that covers it, though having an explicit error message for
>>> any other value of `i` will probably be better than the default
>>> unmatched case one.
>>>
>>> >
>>> > Thanks.
>>> >
>>> > _______________________________________________
>>> > Haskell-Cafe mailing list
>>> > Haskell-Cafe at haskell.org
>>> > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>> >
>>>
>>>
>>>
>>> --
>>> Ivan Lazar Miljenovic
>>> Ivan.Miljenovic at gmail.com
>>> http://IvanMiljenovic.wordpress.com
>>> _______________________________________________
>>> Haskell-Cafe mailing list
>>> Haskell-Cafe at haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>
>>
>



-- 
Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com
http://IvanMiljenovic.wordpress.com


More information about the Haskell-Cafe mailing list