packages feed

function-combine-0.1.0: Control/Combine/Test.hs

{-# LANGUAGE EmptyDataDecls, FlexibleContexts #-}
-- -fallow-undecidable-instances
-- .$Header: c:/Source/Haskell/Combine/Control/Combine/RCS/Test.hs,v 1.6 2011/09/14 02:00:57 dosuser Exp dosuser $
module Control.Combine.Test where

import Data.Type.Eq
import Data.Type.Nat

import Control.Combine hiding (C)

data A
data B
data C
data D
data E

type Fn = A -> B -> C -> D -> E

t1 :: (FlipType Z Fn ((a -> b -> c) -> (b -> a -> c)),
        TypeCast ((a -> b -> c) -> (b -> a -> c))
            (Fn -> B -> A -> C -> D -> E)) =>
    (a -> b -> c) -> (b -> a -> c)
t1 = flip
t2 :: (FlipType (S Z) Fn ((a -> b -> c) -> (b -> a -> c)),
        TypeCast ((a -> b -> c) -> (b -> a -> c))
            ((B -> C -> D -> E) -> (C -> B -> D -> E))) =>
    (a -> b -> c) -> (b -> a -> c)
t2 = flip
t3 :: (FlipType (S (S Z)) Fn ((a -> b -> c) -> (b -> a -> c)),
        TypeCast ((a -> b -> c) -> (b -> a -> c))
            ((C -> D -> E) -> (D -> C -> E))) =>
    (a -> b -> c) -> (b -> a -> c)
t3 = flip

fn :: Fn
fn = undefined

fl :: FlipType n f ((a -> b -> c) -> (b -> a -> c)) =>
    n -> f -> ((a -> b -> c) -> (b -> a -> c))
fl _ _ = flip

t4 :: Fn -> B -> A -> C -> D -> E
t4 = fl zero fn
t5 :: (B -> C -> D -> E) -> (C -> B -> D -> E)
t5 = fl one fn
t6 :: (C -> D -> E) -> (D -> C -> E)
t6 = fl two fn

{-
ab :: A -> B
ab = undefined
bc :: B -> C
bc = undefined
cd :: C -> D
cd = undefined
de :: D -> E
de = undefined

abc :: A -> B -> C
abc = undefined
abcd :: A -> B -> C -> D
abcd = undefined
-}

t7 :: (B -> C) -> (A -> B) -> (A -> C)
t7 = compose zero
t8 :: (C -> D) -> (A -> B -> C) -> (A -> B -> D)
t8 = compose one
t9 :: (D -> E) -> (A -> B -> C -> D) -> (A -> B -> C -> E)
t9 = compose two

rt :: RotType n a b => n -> a -> b
rt = undefined

t10 :: A -> B -> C -> D -> E
t10 = rot zero fn
t11 :: B -> A -> C -> D -> E
t11 = rot one fn
t12 :: C -> A -> B -> D -> E
t12 = rot two fn
t13 :: D -> A -> B -> C -> E
t13 = rot three fn

t14 :: (C -> D -> E) -> (A -> B -> D) -> (A -> B -> C -> E)
t14 = compose one . rot one

-- vim: expandtab:tabstop=4:shiftwidth=4