| ||||||||

| ||||||||

Description | ||||||||

Summary: Top-level module for this library.
By importing this module, the user is able to use all the generic
functionality. The user is only required to provide an instance of
Consider a datatype representing logical expressions: data Logic = Var String | Logic :->: Logic -- implication | Logic :<->: Logic -- equivalence | Logic :&&: Logic -- and (conjunction) | Logic :||: Logic -- or (disjunction) | Not Logic -- not | T -- true | F -- false First we import the relevant modules: import Generics.Regular import Generics.Regular.Functions import qualified Generics.Regular.Functions.Show as G import qualified Generics.Regular.Functions.Read as G An instance of $(deriveAll ''Logic "PFLogic") type instance PF Logic = PFLogic We define some logic expressions: l1, l2, l3 :: Logic l1 = Var "p" l2 = Not l1 l3 = l1 :->: l2 And now we can use all of the generic functions. Flattening: ex0 :: [Logic] ex0 = flattenr (from l3) > [Var "p",Not (Var "p")] Generic equality: ex1, ex2 :: Bool ex1 = eq l3 l3 > True ex2 = eq l3 l2 > False Generic show: ex3 :: String ex3 = G.show l3 > "((:->:) (Var \"p\") (Not (Var \"p\")))" Generic read: ex4 :: Logic ex4 = G.read ex3 > Var "p" :->: Not (Var "p") Value generation: ex5, ex6 :: Logic ex5 = left > Var "" ex6 = right > F Folding: ex7 :: Bool ex7 = fold (alg (\_ -> False)) l3 where alg env = (env & impl & (==) & (&&) & (||) & not & True & False) impl p q = not p || q > True Unfolding: ex8 :: Logic ex8 = unfold alg 8 where alg :: CoAlgebra Logic Int alg n | odd n || n <= 0 = Left "" | even n = Right (Left (n-1,n-2)) > Var "" :->: (Var "" :->: (Var "" :->: (Var "" :->: Var ""))) Constructor names: ex9 = conNames (undefined :: Logic) > ["Var",":->:",":<->:",":&&:",":||:","Not","T","F"] Deep seq: ex10 = gdseq (Not (T :->: (error "deep seq works"))) () > *** Exception: deep seq works | ||||||||

Documentation | ||||||||

module Generics.Regular.Base | ||||||||

module Generics.Regular.TH | ||||||||

module Generics.Regular.Functions | ||||||||

Produced by Haddock version 2.4.2 |