-- 
-- (c) Susumu Katayama
--
-- -profするときに-auto-allするとPAPにenterしてしまう瘢雹部分をわけてみた.最初MyDynamicに入れよう瘢雹と思ったのだが,cyclicになったので.

{-# LANGUAGE TemplateHaskell #-}
module MagicHaskeller.ReadDynamic where
-- import ReadType
import MagicHaskeller.MyDynamic
import Language.Haskell.TH
import MagicHaskeller.TyConLib(defaultTCL)
dynS :: Dynamic
dynS = $(dynamic [|undefTCL|] [| s :: (b->c->a) -> (b->c) -> b -> a |])
dynK :: Dynamic
dynK = $(dynamic [|undefTCL|] [| const :: a->b->a |])
dynI :: Dynamic
dynI = $(dynamic [|undefTCL|] [| id :: a->a |])
dynB :: Dynamic
dynB = $(dynamic [|undefTCL|] [| (.) :: (c->a) -> (b->c) -> b -> a |])
dynC :: Dynamic
dynC = $(dynamic [|undefTCL|] [| flip :: (b->c->a) -> c -> b -> a |])
dynS' :: Dynamic
dynS' = $(dynamic [|undefTCL|] [| sprime :: (a->b->c)->(d->a)->(d->b)->d->c |])
dynB' :: Dynamic
dynB' = $(dynamic [|undefTCL|] [| bprime :: (a->b->c)->a->(d->b)->d->c |])
dynC' :: Dynamic
dynC' = $(dynamic [|undefTCL|] [| cprime :: (a->b->c)->(d->a)->b->d->c |])
-- readType assumes the tcl is undefTCL, so it cannot be used when type constructors other than -> are used.
s :: (t -> t -> t) -> (t -> t) -> t -> t
s = \t -> t -> t
f t -> t
g t
x -> t -> t -> t
f t
x (t -> t
g t
x)
sprime :: (t -> t -> t) -> (t -> t) -> (t -> t) -> t -> t
sprime = (\t -> t -> t
f t -> t
g t -> t
h t
x -> t -> t -> t
f (t -> t
g t
x) (t -> t
h t
x))
bprime :: (t -> t -> t) -> t -> (t -> t) -> t -> t
bprime = (\t -> t -> t
f t
g t -> t
h t
x -> t -> t -> t
f  t
g    (t -> t
h t
x))
cprime :: (t -> t -> t) -> (t -> t) -> t -> t -> t
cprime = (\t -> t -> t
f t -> t
g t
h t
x -> t -> t -> t
f (t -> t
g t
x)  t
h)

-- undefTCL = error "undefTCL" -- This is bad, actually, because we cannot expect laziness to work here, because the tcl is spliced.
undefTCL :: TyConLib
undefTCL = TyConLib
defaultTCL