Поскольку нотация do модуля data / monad работает со структурами, как я могу определить типы монад, которые являются функциями, например парсерами?
Я привык к OCaml, где моя монада имела бы примерноследующая подпись:
module type Parser = sig
type state = string * int
type 'a t = state -> (('a * state), string) Result.t
val return: 'a -> 'a t
val bind: 'a t -> ('a -> 'b t) -> 'b t
end
Извините, что опубликовал пример в OCaml, мои возможности в области ракеток пока невелики.
Совместим ли этот тип монады с данными / монадой илия должен смотреть на другое решение?