В какой класс типов монады вписывается этот класс типов? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть тип t, который поддерживает следующие три операции:

extract :: t a -> a
duplicate :: t a -> t (t a)
(<*>) :: t (a -> b) -> t a -> t b

Естественно, я также могу написать bind:

(>>=) :: f a -> (a -> f b) -> f b
(>>=) x f = f (extract x)

И join:

join :: t (t a) -> t a
join = extract

Но я не могу написать fmap, ни pure

Так что это своего рода «монада» и своего рода «комонада», но без fmap.

Технически, у меня есть fmap и pure, но они ограничены.

Я посмотрел на различные пакеты стилей ограниченных функторов, но все они, похоже, также ограничивают (<*>), но в моем случае (<*>) не ограничен.

Существует ли существующий класс типов, в который я мог бы втиснуть этот тип?

Если кому-то интересно, я имею в виду тип Closure тип

...