Martijn van Steenbergen wrote:
Tom Schrijvers wrote:
data EvalDict sem = EvalDict { val :: Int -> sem Int, add :: sem Int
-> sem Int -> sem Int }
An alternative option is to capture the structure in a GADT:
data Eval a where
Val :: Int -> Eval Int
Add :: Eval Int -> Eval Int -> Eval Int
And then write what were instances before as functions Eval a -> whatever.
But these interpreter functions Eval a -> whatever would have to use
pattern matching at runtime to discover the structure of the term, so
this approach is no longer tagless.
Tillmann
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe