0 | module Libraries.Data.DList
5 | record DList (a : Type) where
7 | runDList : List a -> List a
14 | singleton : a -> DList a
15 | singleton a = MkDList (a ::)
18 | (::) : a -> DList a -> DList a
19 | (::) a as = MkDList ((a ::) . runDList as)
22 | snoc : DList a -> a -> DList a
23 | snoc as a = MkDList (runDList as . (a ::))
26 | appendR : DList a -> List a -> DList a
27 | appendR as bs = MkDList (runDList as . (bs ++))
30 | appendL : List a -> DList a -> DList a
31 | appendL as bs = MkDList ((as ++) . runDList bs)
34 | (++) : DList a -> DList a -> DList a
35 | as ++ bs = MkDList (runDList as . runDList bs)
38 | reify : DList a -> List a
39 | reify as = runDList as []
45 | Semigroup (DList a) where
46 | xs <+> ys = xs ++ ys
49 | Monoid (DList a) where
53 | FromString (DList String) where
54 | fromString = singleton