import Ai -- The MemoTerm type is abstract. class (Eq a, Show a) => MemoTerm a where -- FIXME: functor? -- create a variable letTerm :: String -> a -> a -- map argument transformer over term's arguments foldTerm :: (a -> b -> b) -> b -> a -> b instance (Eq a, Show a) => MemoTerm (Term a) where letTerm = Ai.letTerm foldTerm = Ai.foldTerm