multirec-0.2: examples/SingleExamples.hs
{-# LANGUAGE FlexibleContexts #-}
module SingleExamples where
import Generics.MultiRec.Base
import Generics.MultiRec.FoldAlgK
-- Replace SingleUse with SingleTHUse below if you want
-- to test TH code generation.
import SingleUse
import Single
-- | evalLogic takes a function that gives a logic values to variables,
-- | and a Logic expression, and evaluates it.
evalLogic :: (String -> Bool) -> Logic -> Bool
evalLogic env = fold algebra
where
algebra :: Algebra LogicF Bool
algebra _ = env & impl & (==) & (&&) & (||) & not & True & False
impl p q = not p || q