-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Haskus utility modules -- -- Haskus data utility modules @package haskus-utils-data @version 1.0 -- | Functor helpers module Haskus.Utils.Functor module Haskus.Utils.List -- | Check that a list has the given length (support infinite lists) checkLength :: Word -> [a] -> Bool module Haskus.Utils.Map module Haskus.Utils.Map.Strict -- | Utils for Maybe data type module Haskus.Utils.Maybe -- | Flipped fromMaybe onNothing :: Maybe a -> a -> a -- | Flipped fromMaybeM onNothingM :: Monad m => m (Maybe a) -> m a -> m a -- | fromMaybe in a Monad fromMaybeM :: Monad m => m a -> m (Maybe a) -> m a -- | Get the head of the list if the latter is not empty headMaybe :: [a] -> Maybe a -- | Utils for Monads module Haskus.Utils.Monad class MonadIO m => MonadInIO m -- | Lift with*-like functions into IO (alloca, etc.) liftWith :: MonadInIO m => (forall c. (a -> IO c) -> IO c) -> (a -> m b) -> m b -- | Lift with*-like functions into IO (alloca, etc.) liftWith2 :: MonadInIO m => (forall c. (a -> b -> IO c) -> IO c) -> (a -> b -> m e) -> m e instance Haskus.Utils.Monad.MonadInIO GHC.Types.IO instance Haskus.Utils.Monad.MonadInIO m => Haskus.Utils.Monad.MonadInIO (Control.Monad.Trans.State.Lazy.StateT s m) -- | Tuple helpers module Haskus.Utils.Tuple -- | Uncurry specialised for triple uncurry3 :: (a -> b -> c -> e) -> (a, b, c) -> e -- | Uncurry specialised for quadruple uncurry4 :: (a -> b -> c -> d -> e) -> (a, b, c, d) -> e -- | Take specialised for quadruple take4 :: [a] -> (a, a, a, a) -- | toList for quadruple fromTuple4 :: (a, a, a, a) -> [a] -- | Singleton type newtype Single a Single :: a -> Single a -- | Extract a tuple value statically class ExtractTuple (n :: Nat) t x | n t -> x -- | Extract a tuple value by type-level index tupleN :: ExtractTuple n t x => t -> x class TupleHead ts ts' | ts -> ts' tupleHead :: TupleHead ts ts' => ts -> ts' class TupleTail ts ts' | ts -> ts' tupleTail :: TupleTail ts ts' => ts -> ts' class TupleCons t ts ts' | t ts -> ts' tupleCons :: TupleCons t ts ts' => t -> ts -> ts' -- | Reorder tuple elements class ReorderTuple t1 t2 -- | Reorder tuple elements tupleReorder :: ReorderTuple t1 t2 => t1 -> t2 instance GHC.Classes.Eq a => GHC.Classes.Eq (Haskus.Utils.Tuple.Single a) instance GHC.Show.Show a => GHC.Show.Show (Haskus.Utils.Tuple.Single a) instance Haskus.Utils.Tuple.ReorderTuple (Haskus.Utils.Tuple.Single a) (Haskus.Utils.Tuple.Single a) instance Haskus.Utils.Tuple.ReorderTuple (a, b) (a, b) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c) (a, b, c) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d) (a, b, c, d) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e) (a, b, c, d, e) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f) (a, b, c, d, e, f) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g) (a, b, c, d, e, f, g) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g, h) (a, b, c, d, e, f, g, h) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g, h, i) (a, b, c, d, e, f, g, h, i) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g, h, i, j) (a, b, c, d, e, f, g, h, i, j) instance Haskus.Utils.Tuple.ReorderTuple (a, b) (b, a) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c) (a, c, b) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c) (b, a, c) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c) (b, c, a) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c) (c, a, b) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c) (c, b, a) instance Haskus.Utils.Tuple.ReorderTuple (b, c, d) (x, y, z) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d) (a, x, y, z) instance Haskus.Utils.Tuple.ReorderTuple (a, c, d) (x, y, z) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d) (x, b, y, z) instance Haskus.Utils.Tuple.ReorderTuple (a, b, d) (x, y, z) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d) (x, y, c, z) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c) (x, y, z) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d) (x, y, z, d) instance Haskus.Utils.Tuple.ReorderTuple (b, c, d, e) (x, y, z, w) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e) (a, x, y, z, w) instance Haskus.Utils.Tuple.ReorderTuple (a, c, d, e) (x, y, z, w) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e) (x, b, y, z, w) instance Haskus.Utils.Tuple.ReorderTuple (a, b, d, e) (x, y, z, w) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e) (x, y, c, z, w) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, e) (x, y, z, w) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e) (x, y, z, d, w) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d) (x, y, z, w) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e) (x, y, z, w, e) instance Haskus.Utils.Tuple.ReorderTuple (b, c, d, e, f) (x, y, z, w, v) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f) (a, x, y, z, w, v) instance Haskus.Utils.Tuple.ReorderTuple (a, c, d, e, f) (x, y, z, w, v) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f) (x, b, y, z, w, v) instance Haskus.Utils.Tuple.ReorderTuple (a, b, d, e, f) (x, y, z, w, v) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f) (x, y, c, z, w, v) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, e, f) (x, y, z, w, v) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f) (x, y, z, d, w, v) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, f) (x, y, z, w, v) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f) (x, y, z, w, e, v) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e) (x, y, z, w, v) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f) (x, y, z, w, v, f) instance Haskus.Utils.Tuple.ReorderTuple (b, c, d, e, f, g) (x, y, z, w, v, u) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g) (a, x, y, z, w, v, u) instance Haskus.Utils.Tuple.ReorderTuple (a, c, d, e, f, g) (x, y, z, w, v, u) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g) (x, b, y, z, w, v, u) instance Haskus.Utils.Tuple.ReorderTuple (a, b, d, e, f, g) (x, y, z, w, v, u) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g) (x, y, c, z, w, v, u) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, e, f, g) (x, y, z, w, v, u) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g) (x, y, z, d, w, v, u) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, f, g) (x, y, z, w, v, u) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g) (x, y, z, w, e, v, u) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, g) (x, y, z, w, v, u) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g) (x, y, z, w, v, f, u) instance Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f) (x, y, z, w, v, u) => Haskus.Utils.Tuple.ReorderTuple (a, b, c, d, e, f, g) (x, y, z, w, v, u, g) instance Haskus.Utils.Tuple.TupleCons a (Haskus.Utils.Tuple.Single b) (a, b) instance Haskus.Utils.Tuple.TupleCons a (b, c) (a, b, c) instance Haskus.Utils.Tuple.TupleCons a (b, c, d) (a, b, c, d) instance Haskus.Utils.Tuple.TupleCons a (b, c, d, e) (a, b, c, d, e) instance Haskus.Utils.Tuple.TupleCons a (b, c, d, e, f) (a, b, c, d, e, f) instance Haskus.Utils.Tuple.TupleTail (a, b) (Haskus.Utils.Tuple.Single b) instance Haskus.Utils.Tuple.TupleTail (a, b, c) (b, c) instance Haskus.Utils.Tuple.TupleTail (a, b, c, d) (b, c, d) instance Haskus.Utils.Tuple.TupleTail (a, b, c, d, e) (b, c, d, e) instance Haskus.Utils.Tuple.TupleTail (a, b, c, d, e, f) (b, c, d, e, f) instance Haskus.Utils.Tuple.TupleHead (Haskus.Utils.Tuple.Single a) a instance Haskus.Utils.Tuple.TupleHead (a, b) a instance Haskus.Utils.Tuple.TupleHead (a, b, c) a instance Haskus.Utils.Tuple.TupleHead (a, b, c, d) a instance Haskus.Utils.Tuple.TupleHead (a, b, c, d, e) a instance Haskus.Utils.Tuple.TupleHead (a, b, c, d, e, f) a instance Haskus.Utils.Tuple.ExtractTuple 0 (Haskus.Utils.Tuple.Single t) t instance Haskus.Utils.Tuple.ExtractTuple 0 (e0, e1) e0 instance Haskus.Utils.Tuple.ExtractTuple 1 (e0, e1) e1 instance Haskus.Utils.Tuple.ExtractTuple 0 (e0, e1, e2) e0 instance Haskus.Utils.Tuple.ExtractTuple 1 (e0, e1, e2) e1 instance Haskus.Utils.Tuple.ExtractTuple 2 (e0, e1, e2) e2 instance Haskus.Utils.Tuple.ExtractTuple 0 (e0, e1, e2, e3) e0 instance Haskus.Utils.Tuple.ExtractTuple 1 (e0, e1, e2, e3) e1 instance Haskus.Utils.Tuple.ExtractTuple 2 (e0, e1, e2, e3) e2 instance Haskus.Utils.Tuple.ExtractTuple 3 (e0, e1, e2, e3) e3 instance Haskus.Utils.Tuple.ExtractTuple 0 (e0, e1, e2, e3, e4) e0 instance Haskus.Utils.Tuple.ExtractTuple 1 (e0, e1, e2, e3, e4) e1 instance Haskus.Utils.Tuple.ExtractTuple 2 (e0, e1, e2, e3, e4) e2 instance Haskus.Utils.Tuple.ExtractTuple 3 (e0, e1, e2, e3, e4) e3 instance Haskus.Utils.Tuple.ExtractTuple 4 (e0, e1, e2, e3, e4) e4 instance Haskus.Utils.Tuple.ExtractTuple 0 (e0, e1, e2, e3, e4, e5) e0 instance Haskus.Utils.Tuple.ExtractTuple 1 (e0, e1, e2, e3, e4, e5) e1 instance Haskus.Utils.Tuple.ExtractTuple 2 (e0, e1, e2, e3, e4, e5) e2 instance Haskus.Utils.Tuple.ExtractTuple 3 (e0, e1, e2, e3, e4, e5) e3 instance Haskus.Utils.Tuple.ExtractTuple 4 (e0, e1, e2, e3, e4, e5) e4 instance Haskus.Utils.Tuple.ExtractTuple 5 (e0, e1, e2, e3, e4, e5) e5 instance Haskus.Utils.Tuple.ExtractTuple 0 (e0, e1, e2, e3, e4, e5, e6) e0 instance Haskus.Utils.Tuple.ExtractTuple 1 (e0, e1, e2, e3, e4, e5, e6) e1 instance Haskus.Utils.Tuple.ExtractTuple 2 (e0, e1, e2, e3, e4, e5, e6) e2 instance Haskus.Utils.Tuple.ExtractTuple 3 (e0, e1, e2, e3, e4, e5, e6) e3 instance Haskus.Utils.Tuple.ExtractTuple 4 (e0, e1, e2, e3, e4, e5, e6) e4 instance Haskus.Utils.Tuple.ExtractTuple 5 (e0, e1, e2, e3, e4, e5, e6) e5 instance Haskus.Utils.Tuple.ExtractTuple 6 (e0, e1, e2, e3, e4, e5, e6) e6 instance Haskus.Utils.Tuple.ExtractTuple 0 (e0, e1, e2, e3, e4, e5, e6, e7) e0 instance Haskus.Utils.Tuple.ExtractTuple 1 (e0, e1, e2, e3, e4, e5, e6, e7) e1 instance Haskus.Utils.Tuple.ExtractTuple 2 (e0, e1, e2, e3, e4, e5, e6, e7) e2 instance Haskus.Utils.Tuple.ExtractTuple 3 (e0, e1, e2, e3, e4, e5, e6, e7) e3 instance Haskus.Utils.Tuple.ExtractTuple 4 (e0, e1, e2, e3, e4, e5, e6, e7) e4 instance Haskus.Utils.Tuple.ExtractTuple 5 (e0, e1, e2, e3, e4, e5, e6, e7) e5 instance Haskus.Utils.Tuple.ExtractTuple 6 (e0, e1, e2, e3, e4, e5, e6, e7) e6 instance Haskus.Utils.Tuple.ExtractTuple 7 (e0, e1, e2, e3, e4, e5, e6, e7) e7 -- | Heterogeneous list utils module Haskus.Utils.HList -- | Heterogeneous list -- | Head hHead :: HList (e : l) -> e -- | Tail hTail :: HList (e : l) -> HList l -- | Length hLength :: forall xs. (KnownNat (Length xs)) => HList xs -> Word hAppend :: HAppendList l1 l2 => HList l1 -> HList l2 -> HList (Concat l1 l2) -- | Like HFoldr but only use types, not values! -- -- It allows us to foldr over a list of types, without any associated -- hlist of values. class HFoldr' f v (l :: [*]) r hFoldr' :: HFoldr' f v l r => f -> v -> HList l -> r -- | Like HFoldl but only use types, not values! -- -- It allows us to foldr over a list of types, without any associated -- hlist of values. class HFoldl' f (z :: *) xs (r :: *) hFoldl' :: HFoldl' f z xs r => f -> z -> HList xs -> r -- | Convert between hlists and tuples class HTuple' v t | v -> t, t -> v -- | Convert an heterogeneous list into a tuple hToTuple' :: HTuple' v t => HList v -> t -- | Convert a tuple into an heterogeneous list hFromTuple' :: HTuple' v t => t -> HList v -- | Apply the function identified by the data type f from type a to type -- b. class Apply f a b apply :: Apply f a b => f -> a -> b class HZipList x y l | x y -> l, l -> x y hZipList :: HZipList x y l => HList x -> HList y -> HList l class HFoldr f v (l :: [*]) r hFoldr :: HFoldr f v l r => f -> v -> HList l -> r class HFoldl f (z :: *) xs (r :: *) hFoldl :: HFoldl f z xs r => f -> z -> HList xs -> r class HReverse xs sx | xs -> sx, sx -> xs hReverse :: HReverse xs sx => HList xs -> HList sx instance GHC.Classes.Eq (Haskus.Utils.HList.HList '[]) instance (GHC.Classes.Eq x, GHC.Classes.Eq (Haskus.Utils.HList.HList xs)) => GHC.Classes.Eq (Haskus.Utils.HList.HList (x : xs)) instance GHC.Classes.Ord (Haskus.Utils.HList.HList '[]) instance (GHC.Classes.Ord x, GHC.Classes.Ord (Haskus.Utils.HList.HList xs)) => GHC.Classes.Ord (Haskus.Utils.HList.HList (x : xs)) instance Haskus.Utils.HList.HTuple' '[] () instance Haskus.Utils.HList.HTuple' '[a] (Haskus.Utils.Tuple.Single a) instance Haskus.Utils.HList.HTuple' '[a, b] (a, b) instance Haskus.Utils.HList.HTuple' '[a, b, c] (a, b, c) instance Haskus.Utils.HList.HTuple' '[a, b, c, d] (a, b, c, d) instance Haskus.Utils.HList.HTuple' '[a, b, c, d, e] (a, b, c, d, e) instance Haskus.Utils.HList.HTuple' '[a, b, c, d, e, f] (a, b, c, d, e, f) instance Haskus.Utils.HList.HTuple' '[a, b, c, d, e, f, g] (a, b, c, d, e, f, g) instance Haskus.Utils.HList.HTuple' '[a, b, c, d, e, f, g, h] (a, b, c, d, e, f, g, h) instance Haskus.Utils.HList.HTuple' '[a, b, c, d, e, f, g, h, i] (a, b, c, d, e, f, g, h, i) instance Haskus.Utils.HList.HTuple' '[a, b, c, d, e, f, g, h, i, j] (a, b, c, d, e, f, g, h, i, j) instance (Haskus.Utils.HList.HRevApp xs '[] sx, Haskus.Utils.HList.HRevApp sx '[] xs) => Haskus.Utils.HList.HReverse xs sx instance Haskus.Utils.HList.HRevApp '[] l2 l2 instance Haskus.Utils.HList.HRevApp l (x : l') z => Haskus.Utils.HList.HRevApp (x : l) l' z instance Haskus.Utils.HList.HZipList '[] '[] '[] instance ((x, y) ~ z, Haskus.Utils.HList.HZipList xs ys zs) => Haskus.Utils.HList.HZipList (x : xs) (y : ys) (z : zs) instance (zx ~ (z, x), Haskus.Utils.HList.Apply f zx z', Haskus.Utils.HList.HFoldl' f z' xs r) => Haskus.Utils.HList.HFoldl' f z (x : xs) r instance (z ~ z') => Haskus.Utils.HList.HFoldl' f z '[] z' instance (zx ~ (z, x), Haskus.Utils.HList.Apply f zx z', Haskus.Utils.HList.HFoldl f z' xs r) => Haskus.Utils.HList.HFoldl f z (x : xs) r instance (z ~ z') => Haskus.Utils.HList.HFoldl f z '[] z' instance (v ~ v') => Haskus.Utils.HList.HFoldr' f v '[] v' instance (Haskus.Utils.HList.Apply f (e, r) r', Haskus.Utils.HList.HFoldr' f v l r) => Haskus.Utils.HList.HFoldr' f v (e : l) r' instance (v ~ v') => Haskus.Utils.HList.HFoldr f v '[] v' instance (Haskus.Utils.HList.Apply f (e, r) r', Haskus.Utils.HList.HFoldr f v l r) => Haskus.Utils.HList.HFoldr f v (e : l) r' instance Haskus.Utils.HList.HAppendList '[] l2 instance Haskus.Utils.HList.HAppendList l l' => Haskus.Utils.HList.HAppendList (x : l) l' instance GHC.Show.Show (Haskus.Utils.HList.HList '[]) instance (GHC.Show.Show e, GHC.Show.Show (Haskus.Utils.HList.HList l)) => GHC.Show.Show (Haskus.Utils.HList.HList (e : l))