Привет, я пытаюсь реализовать "Бедный человек" Concurrency Monad. Вот мой код:
import Control.Monad
data Concurrent a = Concurrent ((a -> Action) -> Action)
data Action
= Atom (IO Action)
| Fork Action Action
| Stop
instance Monad Concurrent where
(Concurrent ma) >>= f = Concurrent (\x -> ma(\y -> "Something return a Action"))
return x = Concurrent (\c -> c x)
Вот мой анализ:
x
имеет тип b
, y
имеет тип a
, f
имеет тип (a -> ((b ->Action) -> Action))
. Чтобы выяснить "Что-то вернуть действие", я сначала вычисляю (f y)
, который возвращает тип ((b ->Action) -> Action)
. Затем, как можно использовать его с x
для создания Action?