thrist-0.0: Data/Thrist.hs
module Data.Thrist( Thrist(..)
, foldThrist ) where
import Prelude
-- import Data.Char
data Thrist :: (* -> * -> *) -> * -> * -> * where
Nil :: Thrist p a a
Cons :: p a b -> Thrist p b c -> Thrist p a c
foldThrist :: (forall i j k . p i j -> p j k -> p i k) -> p c c -> Thrist p a c -> p a c
foldThrist _ v Nil = v
foldThrist f v (Cons h t) = h `f` (foldThrist f v t)
{- Simple demo:
t1 :: Thrist (->) Char Char
t1 = ord `Cons` ((\i -> i+32) `Cons` (chr `Cons` Nil))
t2 :: Char -> Char
t2 = foldThrist (flip (.)) id t1
-}