{-# 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