-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Depth-typed functor-based trees, both top-down and bottom-up
--
-- Depth-typed functor-based trees, both top-down and bottom-up
@package ftree
@version 0.1.5
-- | Top-down, depth-typed functor trees. In other words, right-associated
-- n-ary functor composition. See
-- http://conal.net/blog/posts/a-trie-for-length-typed-vectors/.
module Data.FTree.BottomUp
data T :: (* -> *) -> * -> (* -> *)
[L] :: a -> T f Z a
[B] :: IsNat n => T f n (f a) -> T f (S n) a
type (:^) = T
unL :: (f :^ Z) a -> a
unB :: (f :^ S n) a -> (f :^ n) (f a)
foldT :: forall f n a z. Functor f => (a -> z) -> (f a -> a) -> (f :^ n) a -> z
-- | Operate inside the representation of `f :^ n` to make another,
-- preserving depth.
inT :: (a -> b) -> (forall n. IsNat n => (f :^ n) (f a) -> (f :^ n) (f b)) -> forall n. (f :^ n) a -> (f :^ n) b
-- | Operate inside the representation of two `f :^ n` to make another,
-- preserving depth.
inT2 :: (a -> b -> c) -> (forall n. IsNat n => (f :^ n) (f a) -> (f :^ n) (f b) -> (f :^ n) (f c)) -> forall n. (f :^ n) a -> (f :^ n) b -> (f :^ n) c
inL :: (a -> b) -> (f :^ Z) a -> (f :^ Z) b
inB :: ((f :^ n) (f a) -> (f :^ n) (f b)) -> (f :^ S n) a -> (f :^ S n) b
inL2 :: (a -> b -> c) -> (f :^ Z) a -> (f :^ Z) b -> (f :^ Z) c
inB2 :: ((f :^ n) (f a) -> (f :^ n) (f b) -> (f :^ n) (f c)) -> (f :^ S n) a -> (f :^ S n) b -> (f :^ S n) c
instance (GHC.Base.Functor f, Text.ShowF.ShowF f, GHC.Show.Show a) => GHC.Show.Show ((Data.FTree.BottomUp.:^) f n a)
instance (GHC.Base.Functor f, Text.ShowF.ShowF f) => Text.ShowF.ShowF (f Data.FTree.BottomUp.:^ n)
instance GHC.Base.Functor f => GHC.Base.Functor (f Data.FTree.BottomUp.:^ n)
instance (TypeUnary.Nat.IsNat n, GHC.Base.Applicative f) => GHC.Base.Applicative (f Data.FTree.BottomUp.:^ n)
instance (GHC.Base.Functor f, Data.Foldable.Foldable f) => Data.Foldable.Foldable (f Data.FTree.BottomUp.:^ n)
instance Data.Traversable.Traversable f => Data.Traversable.Traversable (f Data.FTree.BottomUp.:^ n)
instance (TypeUnary.Nat.IsNat n, GHC.Base.Applicative f, GHC.Base.Semigroup m) => GHC.Base.Semigroup ((Data.FTree.BottomUp.:^) f n m)
instance (TypeUnary.Nat.IsNat n, GHC.Base.Applicative f, GHC.Base.Monoid m) => GHC.Base.Monoid ((Data.FTree.BottomUp.:^) f n m)
instance (Data.Foldable.Foldable f, GHC.Base.Applicative f, TypeUnary.Nat.IsNat n, GHC.Classes.Eq a) => GHC.Classes.Eq ((Data.FTree.BottomUp.:^) f n a)
instance (Data.Foldable.Foldable f, GHC.Base.Applicative f, TypeUnary.Nat.IsNat n, GHC.Classes.Ord a) => GHC.Classes.Ord ((Data.FTree.BottomUp.:^) f n a)
-- | Top-down, depth-typed functor trees. In other words, right-associated
-- n-ary functor composition. See
-- http://conal.net/blog/posts/a-trie-for-length-typed-vectors/.
module Data.FTree.TopDown
data T :: (* -> *) -> * -> (* -> *)
[L] :: a -> T f Z a
[B] :: IsNat n => f (T f n a) -> T f (S n) a
type (:^) = T
unL :: (f :^ Z) a -> a
unB :: (f :^ S n) a -> f ((f :^ n) a)
foldT :: forall f n a z. Functor f => (a -> z) -> (f z -> z) -> (f :^ n) a -> z
-- | Operate inside the representation of `f :^ n` to make another,
-- preserving depth.
inT :: (a -> b) -> (forall n. IsNat n => f ((f :^ n) a) -> f ((f :^ n) b)) -> forall n. (f :^ n) a -> (f :^ n) b
-- | Operate inside the representation of two `f :^ n` to make another,
-- preserving depth.
inT2 :: (a -> b -> c) -> (forall n. IsNat n => f ((f :^ n) a) -> f ((f :^ n) b) -> f ((f :^ n) c)) -> forall n. (f :^ n) a -> (f :^ n) b -> (f :^ n) c
inL :: (a -> b) -> (f :^ Z) a -> (f :^ Z) b
inB :: (f ((f :^ n) a) -> f ((f :^ n) b)) -> (f :^ S n) a -> (f :^ S n) b
inL2 :: (a -> b -> c) -> (f :^ Z) a -> (f :^ Z) b -> (f :^ Z) c
inB2 :: (f ((f :^ n) a) -> f ((f :^ n) b) -> f ((f :^ n) c)) -> (f :^ S n) a -> (f :^ S n) b -> (f :^ S n) c
instance (Text.ShowF.ShowF f, GHC.Show.Show a) => GHC.Show.Show ((Data.FTree.TopDown.:^) f n a)
instance Text.ShowF.ShowF f => Text.ShowF.ShowF (f Data.FTree.TopDown.:^ n)
instance GHC.Base.Functor f => GHC.Base.Functor (f Data.FTree.TopDown.:^ n)
instance (TypeUnary.Nat.IsNat n, GHC.Base.Applicative f) => GHC.Base.Applicative (f Data.FTree.TopDown.:^ n)
instance (GHC.Base.Functor f, Data.Foldable.Foldable f) => Data.Foldable.Foldable (f Data.FTree.TopDown.:^ n)
instance Data.Traversable.Traversable f => Data.Traversable.Traversable (f Data.FTree.TopDown.:^ n)
instance (TypeUnary.Nat.IsNat n, GHC.Base.Applicative f, GHC.Base.Semigroup m) => GHC.Base.Semigroup ((Data.FTree.TopDown.:^) f n m)
instance (TypeUnary.Nat.IsNat n, GHC.Base.Applicative f, GHC.Base.Monoid m) => GHC.Base.Monoid ((Data.FTree.TopDown.:^) f n m)
instance (Data.Foldable.Foldable f, GHC.Base.Applicative f, TypeUnary.Nat.IsNat n, GHC.Classes.Eq a) => GHC.Classes.Eq ((Data.FTree.TopDown.:^) f n a)
instance (Data.Foldable.Foldable f, GHC.Base.Applicative f, TypeUnary.Nat.IsNat n, GHC.Classes.Ord a) => GHC.Classes.Ord ((Data.FTree.TopDown.:^) f n a)