-- 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.1
-- | 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 foldl 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))