{-# LANGUAGE TypeFamilies #-} module Main where import qualified Data.Traversable as T import qualified Data.Foldable as F import Data.Monoid --import Control.Monad import Control.Applicative hiding (Const) import Data.Unique import Data.Unsafe.Reify -- Should this is Unsafe.Reify?? import Control.Monad data List a b = Nil | Cons a b deriving Show instance MuRef [a] where type DeRef [a] = List a deRef [] = Nil deRef (x:xs) = Cons x xs mapDeRef f (Cons x xs) = liftM (Cons x) $ f xs mapDeRef f Nil = return Nil instance Functor (List a) where fmap f Nil = Nil fmap f (Cons a b) = Cons a (f b) main = do let g1 = [1..10] reifyGraph g1 >>= print let g2 = [1..10] ++ g2 reifyGraph g2 >>= print