acme-cadre-0.1: car, cdr and more

LicensePublic domain
MaintainerJafet <jafet.vixle@gmail.com>
Stabilityexperimental
Safe HaskellSafe-Inferred
LanguageHaskell98

Acme.Cadre

Description

Cadre is a powerful framework for the organization of heterogeneous units. A live-fire demonstration follows.

Cadre allows any unit to be addressed uniformly:

>>> car (1, 2)
1
>>> car (1, 2, 3)
1
>>> car (1, 2, 3, 4)
1
>>> cdr (1, 2)
2
>>> cdr (1, 2, 3)
(2, 3)
>>> cdr (1, 2, 3, 4)
(2, 3, 4)

and also reassigned uniformly:

>>> setCar (+ 1) (1, 2)
(2, 2)
>>> setCdr (subtract 1) (1, 2)
(1, 1)

Of course, these basic functions can be used to carry out combined operations:

>>> caddr (1, 2, 3, 4)
3
>>> caddr (1, 2, (3, 4))
3
>>> caddr (1, (2, 3, 4))
3
>>> setCaddr (+ 1) (1, 2, 3, (4, 5))
(1, 2, 4, (4, 5))
>>> cdaar . cdddr $ (1, (2, 3, ((4, 5), 6), 7))
5

Observe the simplicity and scalability of our approach. Cadre can use any type of car, opening up more logistical possibilities:

>>> cdddddr [1 .. 10]
[6, 7, 8, 9, 10]
>>> setCddr reverse (0, [1 .. 4])
(0, [1, 4, 3, 2])

From time to time you may find dissent among your ranks. Suppose that your lieutenant insists on

capture :: IO (X, Y, (Z, Z))

but your right-hand-man demands compliance with

dispose :: (X, (Y, [Z])) -> IO ()

Cadre helps them look past their differences and find solidarity:

capture >>= repair4 <&> dispose

repair is straightforward, even in the field. In fact, its constituent steps are clear from its name:

repair4 = reap4 <&> pare4

>>> reap4 (1, 2, 3, 4)
(1, (2, (3, 4)))
>>> pare4 (1, (2, (3, 4))) :: (Int, Int, Int, Int)
(1, 2, 3, 4)
>>> pare4 (1, (2, (3, 4))) :: (Int, [Int])
(1, [2, 3, 4])

By understanding the details of repair, we gain more flexibility in field operations:

>>> setCddr (uncurry (++)) ("a", "b", "c", "d")
-- not permitted due to negative assessment of typing protocol
>>> pare3 . setCddr (uncurry (++)) . reap4 $ ("a", "b", "c", "d") :: (String, String, String)
("a", "b", "cd")

This concludes the live demonstration.

Synopsis

Documentation

(<&>) :: (a -> b) -> (b -> c) -> a -> c infixl 9 Source

(<&>) = flip (.). Hide this if you are importing <&> from Control.Lens.

class Cadre a car cdr | a -> car cdr where Source

Methods

cadre :: a -> (car, cdr) Source

Instances

Cadre [a] a [a] 
Cadre (a1, a2) a1 a2 
Cadre (a1, a2, a3) a1 (a2, a3) 
Cadre (a1, a2, a3, a4) a1 (a2, a3, a4) 
Cadre (a1, a2, a3, a4, a5) a1 (a2, a3, a4, a5) 
Cadre (a1, a2, a3, a4, a5, a6) a1 (a2, a3, a4, a5, a6) 
Cadre (a1, a2, a3, a4, a5, a6, a7) a1 (a2, a3, a4, a5, a6, a7) 
Cadre (a1, a2, a3, a4, a5, a6, a7, a8) a1 (a2, a3, a4, a5, a6, a7, a8) 
Cadre (a1, a2, a3, a4, a5, a6, a7, a8, a9) a1 (a2, a3, a4, a5, a6, a7, a8, a9) 
Cadre (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10) 
Cadre (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) 
Cadre (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) 
Cadre (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) 
Cadre (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) 
Cadre (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) 
Cadre (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) 

car :: Cadre a c b => a -> c Source

cdr :: Cadre a a1 c => a -> c Source

caar :: (Cadre a b b2, Cadre b c b1) => a -> c Source

cadr :: (Cadre a a1 b, Cadre b c b1) => a -> c Source

cdar :: (Cadre a b b1, Cadre b a1 c) => a -> c Source

cddr :: (Cadre a a2 b, Cadre b a1 c) => a -> c Source

caaar :: (Cadre b2 b b3, Cadre a b2 b4, Cadre b c b1) => a -> c Source

caadr :: (Cadre b2 b b3, Cadre a a1 b2, Cadre b c b1) => a -> c Source

cadar :: (Cadre b2 a1 b, Cadre a b2 b3, Cadre b c b1) => a -> c Source

caddr :: (Cadre b2 a1 b, Cadre a a2 b2, Cadre b c b1) => a -> c Source

cdaar :: (Cadre b1 b b2, Cadre a b1 b3, Cadre b a1 c) => a -> c Source

cdadr :: (Cadre b1 b b2, Cadre a a2 b1, Cadre b a1 c) => a -> c Source

cddar :: (Cadre b1 a2 b, Cadre a b1 b2, Cadre b a1 c) => a -> c Source

cdddr :: (Cadre b1 a2 b, Cadre a a3 b1, Cadre b a1 c) => a -> c Source

caaaar :: (Cadre b4 b b5, Cadre b1 c b2, Cadre a b4 b6, Cadre b b1 b3) => a -> c Source

caaadr :: (Cadre b4 b b5, Cadre b1 c b2, Cadre a a1 b4, Cadre b b1 b3) => a -> c Source

caadar :: (Cadre b4 a1 b, Cadre b1 c b2, Cadre a b4 b5, Cadre b b1 b3) => a -> c Source

caaddr :: (Cadre b4 a1 b, Cadre b1 c b2, Cadre a a2 b4, Cadre b b1 b3) => a -> c Source

cadaar :: (Cadre b3 b b4, Cadre b1 c b2, Cadre a b3 b5, Cadre b a1 b1) => a -> c Source

cadadr :: (Cadre b3 b b4, Cadre b1 c b2, Cadre a a2 b3, Cadre b a1 b1) => a -> c Source

caddar :: (Cadre b3 a2 b, Cadre b1 c b2, Cadre a b3 b4, Cadre b a1 b1) => a -> c Source

cadddr :: (Cadre b3 a2 b, Cadre b1 c b2, Cadre a a3 b3, Cadre b a1 b1) => a -> c Source

cdaaar :: (Cadre b3 b b4, Cadre b1 a1 c, Cadre a b3 b5, Cadre b b1 b2) => a -> c Source

cdaadr :: (Cadre b3 b b4, Cadre b1 a1 c, Cadre a a2 b3, Cadre b b1 b2) => a -> c Source

cdadar :: (Cadre b3 a2 b, Cadre b1 a1 c, Cadre a b3 b4, Cadre b b1 b2) => a -> c Source

cdaddr :: (Cadre b3 a2 b, Cadre b1 a1 c, Cadre a a3 b3, Cadre b b1 b2) => a -> c Source

cddaar :: (Cadre b2 b b3, Cadre b1 a1 c, Cadre a b2 b4, Cadre b a2 b1) => a -> c Source

cddadr :: (Cadre b2 b b3, Cadre b1 a1 c, Cadre a a3 b2, Cadre b a2 b1) => a -> c Source

cdddar :: (Cadre b2 a3 b, Cadre b1 a1 c, Cadre a b2 b3, Cadre b a2 b1) => a -> c Source

cddddr :: (Cadre b2 a3 b, Cadre b1 a1 c, Cadre a a4 b2, Cadre b a2 b1) => a -> c Source

caddddr :: (Cadre b4 a3 b2, Cadre b3 a1 b, Cadre b2 a2 b3, Cadre a a4 b4, Cadre b c b1) => a -> c Source

cdddddr :: (Cadre b3 a4 b1, Cadre b2 a2 b, Cadre b1 a3 b2, Cadre a a5 b3, Cadre b a1 c) => a -> c Source

cadddddr :: (Cadre b5 a4 b3, Cadre b4 a2 b, Cadre b3 a3 b4, Cadre b1 c b2, Cadre a a5 b5, Cadre b a1 b1) => a -> c Source

cddddddr :: (Cadre b4 a5 b2, Cadre b3 a3 b, Cadre b2 a4 b3, Cadre b1 a1 c, Cadre a a6 b4, Cadre b a2 b1) => a -> c Source

caddddddr :: (Cadre b6 a5 b4, Cadre b5 a3 b, Cadre b4 a4 b5, Cadre b3 a1 b1, Cadre b1 c b2, Cadre a a6 b6, Cadre b a2 b3) => a -> c Source

cdddddddr :: (Cadre b5 a6 b3, Cadre b4 a4 b, Cadre b3 a5 b4, Cadre b2 a2 b1, Cadre b1 a1 c, Cadre a a7 b5, Cadre b a3 b2) => a -> c Source

cadddddddr :: (Cadre b7 a6 b5, Cadre b6 a4 b, Cadre b5 a5 b6, Cadre b4 a2 b1, Cadre b2 c b3, Cadre b1 a1 b2, Cadre a a7 b7, Cadre b a3 b4) => a -> c Source

cddddddddr :: (Cadre b6 a7 b4, Cadre b5 a5 b, Cadre b4 a6 b5, Cadre b3 a3 b1, Cadre b2 a1 c, Cadre b1 a2 b2, Cadre a a8 b6, Cadre b a4 b3) => a -> c Source

caddddddddr :: (Cadre b8 a7 b6, Cadre b7 a5 b2, Cadre b6 a6 b7, Cadre b5 a3 b3, Cadre b4 a1 b, Cadre b3 a2 b4, Cadre b2 a4 b5, Cadre a a8 b8, Cadre b c b1) => a -> c Source

cdddddddddr :: (Cadre b7 a8 b5, Cadre b6 a6 b1, Cadre b5 a7 b6, Cadre b4 a4 b2, Cadre b3 a2 b, Cadre b2 a3 b3, Cadre b1 a5 b4, Cadre a a9 b7, Cadre b a1 c) => a -> c Source

cadddddddddr :: (Cadre b9 a8 b7, Cadre b8 a6 b3, Cadre b7 a7 b8, Cadre b6 a4 b4, Cadre b5 a2 b, Cadre b4 a3 b5, Cadre b3 a5 b6, Cadre b1 c b2, Cadre a a9 b9, Cadre b a1 b1) => a -> c Source

cddddddddddr :: (Cadre b8 a9 b6, Cadre b7 a7 b2, Cadre b6 a8 b7, Cadre b5 a5 b3, Cadre b4 a3 b, Cadre b3 a4 b4, Cadre b2 a6 b5, Cadre b1 a1 c, Cadre a a10 b8, Cadre b a2 b1) => a -> c Source

class (Cadre a car cdr, Cadre a' car' cdr') => CadreAssign a car cdr a' car' cdr' | a car' cdr' -> a' where Source

Methods

setCadre :: (car -> car') -> (cdr -> cdr') -> a -> a' Source

Instances

CadreAssign [a] a [a] [a] a [a] 
CadreAssign (a1, a2) a1 a2 (b1, b2) b1 b2 
CadreAssign (a1, a2, a3) a1 (a2, a3) (b1, b2, b3) b1 (b2, b3) 
CadreAssign (a1, a2, a3, a4) a1 (a2, a3, a4) (b1, b2, b3, b4) b1 (b2, b3, b4) 
CadreAssign (a1, a2, a3, a4, a5) a1 (a2, a3, a4, a5) (b1, b2, b3, b4, b5) b1 (b2, b3, b4, b5) 
CadreAssign (a1, a2, a3, a4, a5, a6) a1 (a2, a3, a4, a5, a6) (b1, b2, b3, b4, b5, b6) b1 (b2, b3, b4, b5, b6) 
CadreAssign (a1, a2, a3, a4, a5, a6, a7) a1 (a2, a3, a4, a5, a6, a7) (b1, b2, b3, b4, b5, b6, b7) b1 (b2, b3, b4, b5, b6, b7) 
CadreAssign (a1, a2, a3, a4, a5, a6, a7, a8) a1 (a2, a3, a4, a5, a6, a7, a8) (b1, b2, b3, b4, b5, b6, b7, b8) b1 (b2, b3, b4, b5, b6, b7, b8) 
CadreAssign (a1, a2, a3, a4, a5, a6, a7, a8, a9) a1 (a2, a3, a4, a5, a6, a7, a8, a9) (b1, b2, b3, b4, b5, b6, b7, b8, b9) b1 (b2, b3, b4, b5, b6, b7, b8, b9) 
CadreAssign (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10) (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10) b1 (b2, b3, b4, b5, b6, b7, b8, b9, b10) 
CadreAssign (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11) b1 (b2, b3, b4, b5, b6, b7, b8, b9, b10, b11) 
CadreAssign (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12) b1 (b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12) 
CadreAssign (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13) b1 (b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13) 
CadreAssign (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14) b1 (b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14) 
CadreAssign (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15) b1 (b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15) 
CadreAssign (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a1 (a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16) b1 (b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16) 

setCar :: CadreAssign a car cdr' a' car' cdr' => (car -> car') -> a -> a' Source

setCdr :: CadreAssign a car' cdr a' car' cdr' => (cdr -> cdr') -> a -> a' Source

setCaar :: (CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a1 -> a'1 Source

setCadr :: (CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a1 -> a'1 Source

setCdar :: (CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a1 -> a'1 Source

setCddr :: (CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a1 -> a'1 Source

setCaaar :: (CadreAssign a2 a1 cdr'2 a'2 a'1 cdr'2, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a2 -> a'2 Source

setCaadr :: (CadreAssign a2 car'1 a1 a'2 car'1 a'1, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a2 -> a'2 Source

setCadar :: (CadreAssign a2 a1 cdr'1 a'2 a'1 cdr'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a2 -> a'2 Source

setCaddr :: (CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a2 -> a'2 Source

setCdaar :: (CadreAssign a2 a1 cdr'2 a'2 a'1 cdr'2, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a2 -> a'2 Source

setCdadr :: (CadreAssign a2 car'1 a1 a'2 car'1 a'1, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a2 -> a'2 Source

setCddar :: (CadreAssign a2 a1 cdr'1 a'2 a'1 cdr'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a2 -> a'2 Source

setCdddr :: (CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a2 -> a'2 Source

setCaaaar :: (CadreAssign a3 a2 cdr'3 a'3 a'2 cdr'3, CadreAssign a2 a1 cdr'2 a'2 a'1 cdr'2, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a3 -> a'3 Source

setCaaadr :: (CadreAssign a3 car'1 a2 a'3 car'1 a'2, CadreAssign a2 a1 cdr'2 a'2 a'1 cdr'2, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a3 -> a'3 Source

setCaadar :: (CadreAssign a3 a2 cdr'2 a'3 a'2 cdr'2, CadreAssign a2 car'1 a1 a'2 car'1 a'1, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a3 -> a'3 Source

setCaaddr :: (CadreAssign a3 car'2 a2 a'3 car'2 a'2, CadreAssign a2 car'1 a1 a'2 car'1 a'1, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a3 -> a'3 Source

setCadaar :: (CadreAssign a3 a2 cdr'2 a'3 a'2 cdr'2, CadreAssign a2 a1 cdr'1 a'2 a'1 cdr'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a3 -> a'3 Source

setCadadr :: (CadreAssign a3 car'2 a2 a'3 car'2 a'2, CadreAssign a2 a1 cdr'1 a'2 a'1 cdr'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a3 -> a'3 Source

setCaddar :: (CadreAssign a3 a2 cdr'1 a'3 a'2 cdr'1, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a3 -> a'3 Source

setCadddr :: (CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a3 -> a'3 Source

setCdaaar :: (CadreAssign a3 a2 cdr'3 a'3 a'2 cdr'3, CadreAssign a2 a1 cdr'2 a'2 a'1 cdr'2, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a3 -> a'3 Source

setCdaadr :: (CadreAssign a3 car'1 a2 a'3 car'1 a'2, CadreAssign a2 a1 cdr'2 a'2 a'1 cdr'2, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a3 -> a'3 Source

setCdadar :: (CadreAssign a3 a2 cdr'2 a'3 a'2 cdr'2, CadreAssign a2 car'1 a1 a'2 car'1 a'1, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a3 -> a'3 Source

setCdaddr :: (CadreAssign a3 car'2 a2 a'3 car'2 a'2, CadreAssign a2 car'1 a1 a'2 car'1 a'1, CadreAssign a1 a cdr'1 a'1 a' cdr'1, CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a3 -> a'3 Source

setCddaar :: (CadreAssign a3 a2 cdr'2 a'3 a'2 cdr'2, CadreAssign a2 a1 cdr'1 a'2 a'1 cdr'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a3 -> a'3 Source

setCddadr :: (CadreAssign a3 car'2 a2 a'3 car'2 a'2, CadreAssign a2 a1 cdr'1 a'2 a'1 cdr'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a3 -> a'3 Source

setCdddar :: (CadreAssign a3 a2 cdr'1 a'3 a'2 cdr'1, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a3 -> a'3 Source

setCddddr :: (CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a3 -> a'3 Source

setCaddddr :: (CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a4 -> a'4 Source

setCdddddr :: (CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a4 -> a'4 Source

setCadddddr :: (CadreAssign a5 car'5 a4 a'5 car'5 a'4, CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a5 -> a'5 Source

setCddddddr :: (CadreAssign a5 car'5 a4 a'5 car'5 a'4, CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a5 -> a'5 Source

setCaddddddr :: (CadreAssign a6 car'6 a5 a'6 car'6 a'5, CadreAssign a5 car'5 a4 a'5 car'5 a'4, CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a6 -> a'6 Source

setCdddddddr :: (CadreAssign a6 car'6 a5 a'6 car'6 a'5, CadreAssign a5 car'5 a4 a'5 car'5 a'4, CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a6 -> a'6 Source

setCadddddddr :: (CadreAssign a7 car'7 a6 a'7 car'7 a'6, CadreAssign a6 car'6 a5 a'6 car'6 a'5, CadreAssign a5 car'5 a4 a'5 car'5 a'4, CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a7 -> a'7 Source

setCddddddddr :: (CadreAssign a7 car'7 a6 a'7 car'7 a'6, CadreAssign a6 car'6 a5 a'6 car'6 a'5, CadreAssign a5 car'5 a4 a'5 car'5 a'4, CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a7 -> a'7 Source

setCaddddddddr :: (CadreAssign a8 car'8 a7 a'8 car'8 a'7, CadreAssign a7 car'7 a6 a'7 car'7 a'6, CadreAssign a6 car'6 a5 a'6 car'6 a'5, CadreAssign a5 car'5 a4 a'5 car'5 a'4, CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a8 -> a'8 Source

setCdddddddddr :: (CadreAssign a8 car'8 a7 a'8 car'8 a'7, CadreAssign a7 car'7 a6 a'7 car'7 a'6, CadreAssign a6 car'6 a5 a'6 car'6 a'5, CadreAssign a5 car'5 a4 a'5 car'5 a'4, CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a8 -> a'8 Source

setCadddddddddr :: (CadreAssign a9 car'9 a8 a'9 car'9 a'8, CadreAssign a8 car'8 a7 a'8 car'8 a'7, CadreAssign a7 car'7 a6 a'7 car'7 a'6, CadreAssign a6 car'6 a5 a'6 car'6 a'5, CadreAssign a5 car'5 a4 a'5 car'5 a'4, CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car cdr' a' car' cdr') => (car -> car') -> a9 -> a'9 Source

setCddddddddddr :: (CadreAssign a9 car'9 a8 a'9 car'9 a'8, CadreAssign a8 car'8 a7 a'8 car'8 a'7, CadreAssign a7 car'7 a6 a'7 car'7 a'6, CadreAssign a6 car'6 a5 a'6 car'6 a'5, CadreAssign a5 car'5 a4 a'5 car'5 a'4, CadreAssign a4 car'4 a3 a'4 car'4 a'3, CadreAssign a3 car'3 a2 a'3 car'3 a'2, CadreAssign a2 car'2 a1 a'2 car'2 a'1, CadreAssign a1 car'1 a a'1 car'1 a', CadreAssign a car' cdr a' car' cdr') => (cdr -> cdr') -> a9 -> a'9 Source

class PearShaped2 a a1 a2 | a -> a1 a2 where Source

Things that can be reshaped into cons pairs.

Methods

reap2 :: a -> (a1, a2) Source

pare2 :: (a1, a2) -> a Source

Instances

PearShaped2 [a] a a 
PearShaped2 (a1, a2) a1 a2 

repair2 :: (PearShaped2 a a1 a2, PearShaped2 c a1 a2) => a -> c Source

class PearShaped3 a a1 a2 a3 | a -> a1 a2 a3 where Source

Methods

reap3 :: a -> (a1, (a2, a3)) Source

pare3 :: (a1, (a2, a3)) -> a Source

Instances

PearShaped3 [a] a a a 
PearShaped2 a a2 a3 => PearShaped3 (a1, a) a1 a2 a3 
PearShaped3 (a1, a2, a3) a1 a2 a3 

repair3 :: (PearShaped3 a a1 a2 a3, PearShaped3 c a1 a2 a3) => a -> c Source

class PearShaped4 a a1 a2 a3 a4 | a -> a1 a2 a3 a4 where Source

Methods

reap4 :: a -> (a1, (a2, (a3, a4))) Source

pare4 :: (a1, (a2, (a3, a4))) -> a Source

Instances

PearShaped4 [a] a a a a 
PearShaped3 a a2 a3 a4 => PearShaped4 (a1, a) a1 a2 a3 a4 
PearShaped2 a a3 a4 => PearShaped4 (a1, a2, a) a1 a2 a3 a4 
PearShaped4 (a1, a2, a3, a4) a1 a2 a3 a4 

repair4 :: (PearShaped4 a a1 a2 a3 a4, PearShaped4 c a1 a2 a3 a4) => a -> c Source

class PearShaped5 a a1 a2 a3 a4 a5 | a -> a1 a2 a3 a4 a5 where Source

Methods

reap5 :: a -> (a1, (a2, (a3, (a4, a5)))) Source

pare5 :: (a1, (a2, (a3, (a4, a5)))) -> a Source

Instances

PearShaped5 [a] a a a a a 
PearShaped4 a a2 a3 a4 a5 => PearShaped5 (a1, a) a1 a2 a3 a4 a5 
PearShaped3 a a3 a4 a5 => PearShaped5 (a1, a2, a) a1 a2 a3 a4 a5 
PearShaped2 a a4 a5 => PearShaped5 (a1, a2, a3, a) a1 a2 a3 a4 a5 
PearShaped5 (a1, a2, a3, a4, a5) a1 a2 a3 a4 a5 

repair5 :: (PearShaped5 a a1 a2 a3 a4 a5, PearShaped5 c a1 a2 a3 a4 a5) => a -> c Source

class PearShaped6 a a1 a2 a3 a4 a5 a6 | a -> a1 a2 a3 a4 a5 a6 where Source

Methods

reap6 :: a -> (a1, (a2, (a3, (a4, (a5, a6))))) Source

pare6 :: (a1, (a2, (a3, (a4, (a5, a6))))) -> a Source

Instances

PearShaped6 [a] a a a a a a 
PearShaped5 a a2 a3 a4 a5 a6 => PearShaped6 (a1, a) a1 a2 a3 a4 a5 a6 
PearShaped4 a a3 a4 a5 a6 => PearShaped6 (a1, a2, a) a1 a2 a3 a4 a5 a6 
PearShaped3 a a4 a5 a6 => PearShaped6 (a1, a2, a3, a) a1 a2 a3 a4 a5 a6 
PearShaped2 a a5 a6 => PearShaped6 (a1, a2, a3, a4, a) a1 a2 a3 a4 a5 a6 
PearShaped6 (a1, a2, a3, a4, a5, a6) a1 a2 a3 a4 a5 a6 

repair6 :: (PearShaped6 a a1 a2 a3 a4 a5 a6, PearShaped6 c a1 a2 a3 a4 a5 a6) => a -> c Source

class PearShaped7 a a1 a2 a3 a4 a5 a6 a7 | a -> a1 a2 a3 a4 a5 a6 a7 where Source

Methods

reap7 :: a -> (a1, (a2, (a3, (a4, (a5, (a6, a7)))))) Source

pare7 :: (a1, (a2, (a3, (a4, (a5, (a6, a7)))))) -> a Source

Instances

PearShaped7 [a] a a a a a a a 
PearShaped6 a a2 a3 a4 a5 a6 a7 => PearShaped7 (a1, a) a1 a2 a3 a4 a5 a6 a7 
PearShaped5 a a3 a4 a5 a6 a7 => PearShaped7 (a1, a2, a) a1 a2 a3 a4 a5 a6 a7 
PearShaped4 a a4 a5 a6 a7 => PearShaped7 (a1, a2, a3, a) a1 a2 a3 a4 a5 a6 a7 
PearShaped3 a a5 a6 a7 => PearShaped7 (a1, a2, a3, a4, a) a1 a2 a3 a4 a5 a6 a7 
PearShaped2 a a6 a7 => PearShaped7 (a1, a2, a3, a4, a5, a) a1 a2 a3 a4 a5 a6 a7 
PearShaped7 (a1, a2, a3, a4, a5, a6, a7) a1 a2 a3 a4 a5 a6 a7 

repair7 :: (PearShaped7 a a1 a2 a3 a4 a5 a6 a7, PearShaped7 c a1 a2 a3 a4 a5 a6 a7) => a -> c Source

class PearShaped8 a a1 a2 a3 a4 a5 a6 a7 a8 | a -> a1 a2 a3 a4 a5 a6 a7 a8 where Source

Methods

reap8 :: a -> (a1, (a2, (a3, (a4, (a5, (a6, (a7, a8))))))) Source

pare8 :: (a1, (a2, (a3, (a4, (a5, (a6, (a7, a8))))))) -> a Source

Instances

PearShaped8 [a] a a a a a a a a 
PearShaped7 a a2 a3 a4 a5 a6 a7 a8 => PearShaped8 (a1, a) a1 a2 a3 a4 a5 a6 a7 a8 
PearShaped6 a a3 a4 a5 a6 a7 a8 => PearShaped8 (a1, a2, a) a1 a2 a3 a4 a5 a6 a7 a8 
PearShaped5 a a4 a5 a6 a7 a8 => PearShaped8 (a1, a2, a3, a) a1 a2 a3 a4 a5 a6 a7 a8 
PearShaped4 a a5 a6 a7 a8 => PearShaped8 (a1, a2, a3, a4, a) a1 a2 a3 a4 a5 a6 a7 a8 
PearShaped3 a a6 a7 a8 => PearShaped8 (a1, a2, a3, a4, a5, a) a1 a2 a3 a4 a5 a6 a7 a8 
PearShaped2 a a7 a8 => PearShaped8 (a1, a2, a3, a4, a5, a6, a) a1 a2 a3 a4 a5 a6 a7 a8 
PearShaped8 (a1, a2, a3, a4, a5, a6, a7, a8) a1 a2 a3 a4 a5 a6 a7 a8 

repair8 :: (PearShaped8 a a1 a2 a3 a4 a5 a6 a7 a8, PearShaped8 c a1 a2 a3 a4 a5 a6 a7 a8) => a -> c Source

class PearShaped9 a a1 a2 a3 a4 a5 a6 a7 a8 a9 | a -> a1 a2 a3 a4 a5 a6 a7 a8 a9 where Source

Methods

reap9 :: a -> (a1, (a2, (a3, (a4, (a5, (a6, (a7, (a8, a9)))))))) Source

pare9 :: (a1, (a2, (a3, (a4, (a5, (a6, (a7, (a8, a9)))))))) -> a Source

Instances

PearShaped9 [a] a a a a a a a a a 
PearShaped8 a a2 a3 a4 a5 a6 a7 a8 a9 => PearShaped9 (a1, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 
PearShaped7 a a3 a4 a5 a6 a7 a8 a9 => PearShaped9 (a1, a2, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 
PearShaped6 a a4 a5 a6 a7 a8 a9 => PearShaped9 (a1, a2, a3, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 
PearShaped5 a a5 a6 a7 a8 a9 => PearShaped9 (a1, a2, a3, a4, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 
PearShaped4 a a6 a7 a8 a9 => PearShaped9 (a1, a2, a3, a4, a5, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 
PearShaped3 a a7 a8 a9 => PearShaped9 (a1, a2, a3, a4, a5, a6, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 
PearShaped2 a a8 a9 => PearShaped9 (a1, a2, a3, a4, a5, a6, a7, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 
PearShaped9 (a1, a2, a3, a4, a5, a6, a7, a8, a9) a1 a2 a3 a4 a5 a6 a7 a8 a9 

repair9 :: (PearShaped9 a a1 a2 a3 a4 a5 a6 a7 a8 a9, PearShaped9 c a1 a2 a3 a4 a5 a6 a7 a8 a9) => a -> c Source

class PearShaped10 a a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 | a -> a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 where Source

Methods

reap10 :: a -> (a1, (a2, (a3, (a4, (a5, (a6, (a7, (a8, (a9, a10))))))))) Source

pare10 :: (a1, (a2, (a3, (a4, (a5, (a6, (a7, (a8, (a9, a10))))))))) -> a Source

Instances

PearShaped10 [a] a a a a a a a a a a 
PearShaped9 a a2 a3 a4 a5 a6 a7 a8 a9 a10 => PearShaped10 (a1, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 
PearShaped8 a a3 a4 a5 a6 a7 a8 a9 a10 => PearShaped10 (a1, a2, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 
PearShaped7 a a4 a5 a6 a7 a8 a9 a10 => PearShaped10 (a1, a2, a3, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 
PearShaped6 a a5 a6 a7 a8 a9 a10 => PearShaped10 (a1, a2, a3, a4, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 
PearShaped5 a a6 a7 a8 a9 a10 => PearShaped10 (a1, a2, a3, a4, a5, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 
PearShaped4 a a7 a8 a9 a10 => PearShaped10 (a1, a2, a3, a4, a5, a6, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 
PearShaped3 a a8 a9 a10 => PearShaped10 (a1, a2, a3, a4, a5, a6, a7, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 
PearShaped2 a a9 a10 => PearShaped10 (a1, a2, a3, a4, a5, a6, a7, a8, a) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 
PearShaped10 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 

repair10 :: (PearShaped10 a a1 a2 a3 a4 a5 a6 a7 a8 a9 a10, PearShaped10 c a1 a2 a3 a4 a5 a6 a7 a8 a9 a10) => a -> c Source