{-# LANGUAGE Safe #-} -- | -- Copyright: © Herbert Valerio Riedel 2018 -- SPDX-License-Identifier: GPL-2.0-or-later -- -- Minimal API-compatible rip-off of @Data.DList@ module Data.DList ( DList , empty , singleton , append , toList ) where newtype DList a = DList ([a] -> [a]) toList :: DList a -> [a] toList (DList dl) = dl [] singleton :: a -> DList a singleton x = DList (x:) empty :: DList a empty = DList id append :: DList a -> DList a -> DList a append (DList xs) (DList ys) = DList (xs . ys)