Chris Okasaki: Fast Exponentiation to Square Matrices: An Adventure in Types
Páros indexű helyeken a, páratlan indexű helyeken b típusú adatot tartalmazó lista:
a
b
data AlterList a b = Nil | Cons a (AlterList b a) deriving (Eq, Ord, Show, Typeable, Data)
Példa:
Test>
Cons True (Cons 'x' (Cons False Nil))
::
AlterList Bool Char
Típusok:
type Quad a = (a,a,a,a)
data Square1 a = Zero1 a | Succ1 (Quad (Square1 a))
p2 = Succ1 (Succ1 (Zero1 1,Zero1 2,Zero1 3,Zero1 4) ,Succ1 (Zero1 5,Zero1 6,Zero1 7,Zero1 8) ,Succ1 (Zero1 9,Zero1 0,Zero1 1,Zero1 2) ,Succ1 (Zero1 3,Zero1 4,Zero1 5,Zero1 6)) :: Square1 Int
Típus:
data Square2 a = Zero2 a | Succ2 (Square2 (Quad a))
p3 = Succ2 (Succ2 (Zero2 ((0,1,2,3) ,(4,5,6,7) ,(8,9,0,1) ,(2,3,4,5)) )) :: Square2 Int