Tuple-like constructors

Bulat Ziganshin bulatz at HotPOP.com
Tue Feb 7 11:29:03 EST 2006

Hello Robert,

Tuesday, February 07, 2006, 6:42:41 PM, you wrote:

>>> More disturbing is the complete inability to write general functions
>>> over tuples.

RD> As I understand it, you still have to write down the instance  
RD> declarations when using '-fgenerics'.

only one generic instance. it's very much these ideas of using nested
tuples, only with special syntax. below is my definitions of Binary
class for types with only one constructor:

class Binary a where
    -- | Convert value to sequence of bits and write it to the stream
    put_ :: (BinaryStream m h) => h -> a -> m ()
    -- | Read value written to the stream as bit sequence
    get  :: (BinaryStream m h) => h -> m a
    Using "generic type classes" extension, GHC allows to semi-automatically
    generate instances of Binary for any types. All what you need to define
    Binary instance for some type MyType is to write:

    instance Binary MyType where

    These is the all definitions required, but they don't work
    because of current restrictions in GHC's generics support:

    put_ {| Unit  |}  h  Unit     = return ()
    put_ {| a:*:b |}  h (x :*: y) = do put_ h x; put_ h y

    get  {| Unit  |}  h = return ()
    get  {| a:*:b |}  h = do x <- get h; y <- get h; return (x :*: y)

Best regards,
 Bulat                            mailto:bulatz at HotPOP.com

More information about the Haskell-prime mailing list