
On Wed, Jul 29, 2015 at 05:43:23PM +0200, Merijn Verstraaten wrote:
Being a lazy haskeller I figured that ASTs map nicely onto Free and that I could get all the necessary Applicative, Monad, etc. instances for free by using something like:
newtype Expr a = Expr { unExpr :: Free (ExprF Expr) a } deriving (Functor,Applicative,Monad,Foldable,Traversable)
data ExprF f a = App (f a) (f a) | Lam Type (Scope () f a) | TmTrue | TmFalse | If (f a) (f a) (f a) deriving (Eq,Ord,Show,Read,Functor,Foldable,Traversable)
By the way, when I was playing around with bound and free I guessed that it would be more appropriate to define a "higher order" free thing which is called Mu here: Was bound but now I'm free: http://lpaste.net/136836 I'd be grateful if you'd take a look and see if you think it has any benefit over just using Free. Tom