What about record types?
On Wed, Apr 6, 2011 at 11:58 AM, Yves Parès <[email protected]> wrote: > I meant: > > chara = Character 100 $ Armor 40 $ Gun 12 () > > 2011/4/6 Yves Parès <[email protected]> >> >> Hello Café, >> >> I'm trying to get some modular data types. >> The idea that came to me is that I could stack them, for instance : >> >> data Character a = Character { life :: Int, >> charaInner :: a } >> >> data Gun a = Gun { firepower :: Int, >> gunInner :: a } >> >> data Armor a = Armor { resistance :: Int, >> armorInner :: a } >> >> Then a character with a gun and an armor can be build this way: >> >> chara = Character 100 $ Armor 40 $ Gun 12 >> >> The idea now is to be able to get some part of the character: >> >> itsGun :: Character ?? -> Gun ?? >> itsGun = content >> >> Then content would be a class method: >> >> class Has b a where >> content :: a -> b >> >> And it would be recursively defined so that: >> >> instance (Has c b, Has b a) => Has c a where >> content = (content :: b -> c) . (content :: a -> b) >> >> Then itsGun would be more like: >> >> itsGun :: (Has Gun a) => a -> Gun ?? >> itsGun = content >> >> But after some juggling with extensions (ScopedTypeVariables, >> UndecidableInstances, IncoherentInstances...) I can't get it working. >> >> Has someone a simpler way to achieve modular types? > > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > > -- -- Regards, KC _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
