packages feed

barrie-0.4.1: src/Barrie/Packing.hs

module Barrie.Packing where

import Data.Dynamic
import Data.Typeable

class (Typeable a) => Packed a where
    unpack :: [a -> Dynamic]
    unpack = [toDyn]

instance Packed Int where

instance Packed Char where

instance (Packed a) => Packed [a] where

instance (Packed a, Packed b) => Packed (a,b) where
    unpack = [toDyn . fst, toDyn . snd]

instance (Packed a, Packed b, Packed c) => Packed (a,b,c) where
    unpack = [toDyn . get31, toDyn . get32, toDyn . get33]
        where get31 (x,_,_) = x
              get32 (_,x,_) = x
              get33 (_,_,x) = x

instance (Packed a, Packed b, Packed c, Packed d) => Packed (a,b,c,d) where
    unpack = [toDyn . get41, toDyn . get42, toDyn . get43, toDyn.get44]
        where       get41 (x,_,_,_) = x
                    get42 (_,x,_,_) = x
                    get43 (_,_,x,_) = x
                    get44 (_,_,_,x) = x

instance (Packed a, Packed b, Packed c, Packed d, Packed e) =>
    Packed (a,b,c,d,e) where
    unpack = [toDyn . get51, toDyn . get52, toDyn . get53,
                    toDyn.get54, toDyn.get55]
        where get51 (x,_,_,_,_) = x
              get52 (_,x,_,_,_) = x
              get53 (_,_,x,_,_) = x
              get54 (_,_,_,x,_) = x
              get55 (_,_,_,_,x) = x