AJ: This is the same as
Control.Comonad.Cofree from the
However, we need to override the applicative and monad instance, and "probably" due to a Purescript bug it's not working.
The cofree comonad for a
newtype Cofree f a
Comonad for a functor.
A value of type
Cofree f a consists of an
tree, annotated with labels of type
Comonad instance supports redecoration, recomputing
labels from the local context.
(Eq1 f, Eq a) => Eq (Cofree f a)
(Eq1 f) => Eq1 (Cofree f)
(Ord1 f, Ord a) => Ord (Cofree f a)
(Ord1 f) => Ord1 (Cofree f)
(Functor f) => Functor (Cofree f)
(Foldable f) => Foldable (Cofree f)
(Traversable f) => Traversable (Cofree f)
(Functor f) => Extend (Cofree f)
(Functor f) => Comonad (Cofree f)
(Alternative f) => Apply (Cofree f)
(Alternative f) => Applicative (Cofree f)
(Alternative f) => Bind (Cofree f)
(Alternative f) => Monad (Cofree f)
Lazy (Cofree f a)
(Monoid v) => ShiftMap (Widget v) (Cofree (Widget v))
explore :: forall f g a b. Functor f => Functor g => (forall x y. f (x -> y) -> g x -> y) -> Free f (a -> b) -> Cofree g a -> b
Explore a value in the cofree comonad by using an expression in a corresponding free monad.
The free monad should be built from a functor which pairs with the functor underlying the cofree comonad.