packages feed

data-reify-0.1: test/Test4.hs

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