mirror of
https://github.com/unisonweb/unison.git
synced 2024-09-23 16:28:02 +03:00
22 lines
483 B
Plaintext
22 lines
483 B
Plaintext
type Cofree f a = Cofree a (f (Cofree f a))
|
|
|
|
type Functor f = Functor (forall a b. (a ->{} b) -> f a ->{} f b)
|
|
|
|
use Functor Functor
|
|
fmap : Functor f -> (a -> b) -> f a -> f b
|
|
fmap fn f = case fn of
|
|
Functor map -> map f
|
|
|
|
use Cofree Cofree
|
|
|
|
namespace Cofree where
|
|
|
|
extract : Cofree f a -> a
|
|
extract c = case c of
|
|
Cofree a _ -> a
|
|
|
|
duplicate : Functor f -> Cofree f a -> Cofree f (Cofree f a)
|
|
duplicate f c = case c of
|
|
Cofree a p -> Cofree c (fmap f (duplicate f) p)
|
|
|