11 | module Search.Generator
25 | interface Generator a where
26 | generate : Colist1 a
36 | generate = fromStream nats
40 | Generator Bool where
41 | generate = True ::: [False]
45 | {n : Nat} -> Generator (Fin (S n)) where
46 | generate = fromList1 (allFins n)
53 | Generator a => Generator (a, ()) where
54 | generate = map (,()) generate
59 | (Generator a, Generator b) => Generator (a, b) where
60 | generate = plane generate (\ _ => generate)
65 | {0 b : a -> Type} -> (Generator a, (x : a) -> Generator (b x)) =>
66 | Generator (x : a ** b x) where
67 | generate = plane generate (\ x => generate)
71 | {n : Nat} -> Generator a => Generator (Vect n a) where
72 | generate = case n of
74 | S n => map (uncurry (::)) generate
80 | Generator a => Generator (List a) where
81 | generate = [] ::: forget (planeWith listy generate vectors) where
82 | listy : (n : Nat) -> Vect (S n) a -> List a
85 | vectors : (n : Nat) -> Colist1 (Vect (S n) a)
86 | vectors n = generate