[Haskell-cafe] Haskell-Cafe Digest, Vol 141, Issue 25
Michael Baikov
manpacket at gmail.com
Sun May 17 01:38:17 UTC 2015
>
> Suppose the following data type for encoding Boolean expressions:
>
> data BExpr a = BTrue
> | BFalse
> | Id String
> | Not a
> | And a a
> | Or a a
> | BEq a a
> deriving (Functor)
> type Expr = Fix BExpr
>
> It is easy to produce a string representation of an expression or evaluate
> it:
>
> estr :: BExpr String -> String
> eval :: BExpr Bool -> Bool
>
> with the cata function from Data.Functor.Fixedpoint.
>
> Could you suggest a solution for transforming trees encoded as Exp into
> equivalent Expr (e.g Not Not a ~> a)?
> cata does not work since it expects a function f a -> a while a
> transformation would be f a -> f a.
Actually cata works just fine, all you need following transformation
which is f a -> a
alg :: BExpr Expr -> Expr
alg (Not (Fix (Not a))) = a
alg x = Fix x
More information about the Haskell-Cafe
mailing list