module Equation.ImpList where

import Language.Haskell.TH
import Language.Haskell.ER.Syntax
import Language.Haskell.ER.HaskellRewrite
import Language.Haskell.ER.MiscRewrite
import Language.Haskell.ER.Utils
import Language.Haskell.ER.Frees
import Program.ImpList
import ImpList

dictionary :: [ UniHaskellRewrite ]
dictionary = map HaskellRewriteExp
	[ equation "@/hacks/ImpList/id" 
	  	   $(quote [| a |])
		   $(quote [| ImpList.id a |])
             Nothing
{-
	, equation "/Program/ImpList/Equations/listToMyList xs"
	  	   $(quote [| ImpList.listToMyList xs |])	  
		   $(quote [| do ixs <- ImpList.listToMyList []
		   	      	 () <- ImpList.appendListToMyList ixs 
				        (myListToList xs
				 return ixs
		           |])						 
-}
	, equation "/Program/ImpList/Equations/listToMyList (x : xs)"
	  	   $(quote [| ImpList.listToMyList (x : xs) |])
		   $(quote [| do ixs <- ImpList.listToMyList [x]
		   	      	 ImpList.appendListToMyList ixs xs
				 return ixs
		            |])
             Nothing
	, equation "/Program/ImpList/Equations/listToMyList (xs ++ ys)"
	  	   $(quote [| ImpList.listToMyList (xs ++ ys) |])
		   $(quote [| do ixs <- ImpList.listToMyList []
		   	      	 ImpList.appendListToMyList ixs xs
		   	      	 ImpList.appendListToMyList ixs ys
				 return ixs
		            |])
             Nothing
	, equation "/Program/ImpList/Equations/do { v <- myListToList xs ; return (listToMyList v) } => return xs"
	  	   $(quote [| do { v <- ImpList.myListToList xs
		   	         ; return (ImpList.listToMyList v)
				 } |])
		   $(quote [| return xs |])
             Nothing
	, equation "/Program/ImpList/Equations/appendListToMyList ixs [] = return ()"
	  	   $(quote [| ImpList.appendListToMyList ixs [] |])
		   $(quote [| return () |])
             Nothing
	, equation "/Program/ImpList/Equations/appendListToMyList ixs (x:xs) = do { .. ixs [x] ; .. ixs xs }"
	  	   $(quote [| ImpList.appendListToMyList ixs (x:xs) |])
		   $(quote [| do { ImpList.appendListToMyList ixs [x]
		   	         ; ImpList.appendListToMyList ixs xs 
				 } |])
             Nothing	      
	, equation "/Program/ImpList/Equations/appendListToMyList ixs (xs ++ys) = do { .. ixs xs ; .. ixs ys }"
	  	   $(quote [| ImpList.appendListToMyList ixs (xs ++ ys) |])
		   $(quote [| do { ImpList.appendListToMyList ixs xs
		   	         ; ImpList.appendListToMyList ixs ys 
				 } |])
             Nothing	      
	, equation "/Program/ImpList/Equations/fusion of append and mylistBuilding"
	          $(quote [|  ImpList.appendListToMyList ixs (ImpList.myListBuildingToList f) |])
	          $(quote [|  f ixs |])
                 Nothing
        ]


