Chaitin's construction/Combinatory logic
Combinatory logic term modules
CL[edit]
module CL (CL, k, s, apply) where
import Tree (Tree (Leaf, Branch))
import BaseSymbol (BaseSymbol, kay, ess)
type CL = Tree BaseSymbol
k, s :: CL
k = Leaf kay
s = Leaf ess
apply :: CL -> CL -> CL
apply = Branch
CL extension[edit]
module CLExt ((>>@)) where
import CL (CL, apply)
import Control.Monad (Monad, liftM2)
(>>@) :: Monad m => m CL -> m CL -> m CL
(>>@) = liftM2 apply
Base symbol[edit]
module BaseSymbol (BaseSymbol, kay, ess) where
data BaseSymbol = K | S
kay, ess :: BaseSymbol
kay = K
ess = S