Haskell itself is a direct mapping to the Lambda Calculus, as taught previously. However, the Lambda Calculus can also be represented and β-reduced in Haskell.
data LambdaCalc = Var String | Lambda String LambdaCalc | App LambdaCalc LambdaCalc βReduce :: LambdaCalc -> LambdaCalc βReduce l@(Lambda _ _) = l βReduce (App (Lambda id exp1) exp2) = βReduce (subst id exp1 exp2) subst :: String -> LambdaCalc -> LambdaCalc subst id x@(Var z) exp | z == id = exp | otherwise = x subst id (Lambda x exp1) exp | id == x = exp1 | otherwise = subst id exp1 exp subst id (App exp1 exp2) exp = App (subst id exp1 exp) (subst id exp2 exp)
It should be noted that pattern-matching using an
@ labels the whole expression as that variable. For example,
foo b@(Bar x y) = ...
foo to use
y as variables representing parts of
Bar, but also can use
b as a variable representing all of
(Bar x y).
removeAttribs :: XML -> XMLthat takes an XML data type,
x, as defined in part one and returns
xwith all attributes removed.
xmlToString :: XML -> Stringthat takes an XML data type,
x, as defined in part one and returns actual XML in string form. This is a challenging problem.
Navigate this Web site.