with Ada.Containers.Indefinite_Doubly_Linked_Lists;
with Rx.Impl.Preservers;
with Rx.Traits.Types;
with Rx.Impl.Transformers;
with Rx.Impl.Typed;
with Rx.Valueless;
generic
with package Typed is new Rx.Impl.Typed (<>);
package Rx.Collections is
-- Instances of types and transformations that we get automatically when creating a new Rx type
-----------------
-- Valueless --
-----------------
package Valueless is new Impl.Transformers (Typed, Valueless.Typed);
-------------------------
-- Emission of Lists --
-------------------------
package Lists is new Ada.Containers.Indefinite_Doubly_Linked_Lists (Typed.T, Typed.Type_Traits."=");
subtype List is Lists.List;
function Identity (L : List) return List is (L);
package List_Traits is new Rx.Traits.Types (List, List, Identity, Identity);
package Typed_Lists is new Rx.Impl.Typed (List_Traits);
-------------------------------
-- Emission of observables --
-------------------------------
package Observable_Traits is new Rx.Traits.Types (Typed.Contracts.Observable'Class,
Typed.Definite_Observables.Observable,
Typed.Definite_Observables.From,
Typed.Definite_Observables.To_Indef);
package Typed_Observables is new Rx.Impl.Typed (Observable_Traits);
-----------------
-- Operators --
-----------------
package List_Preservers is new Rx.Impl.Preservers (Typed_Lists);
package Into_List_Transformers is new Rx.Impl.Transformers (Typed, Typed_Lists);
package From_List_Transformers is new Rx.Impl.Transformers (Typed_Lists, Typed);
package Obs_Transformers is new Rx.Impl.Transformers (Typed, Typed_Observables);
end Rx.Collections;