почему функция не может принимать монадическое значение и возвращать другое монадическое значение?

Допустим, у нас есть две монадические функции:

  f :: a -> m b
  g :: b -> m c
  h :: a -> m c

Функция связывания определяется как

(>>=) :: m a -> (a -> m b) -> m b

Мой вопрос в том, почему мы не можем сделать что-то вроде ниже. Объявить функцию, которая будет принимать монадическое значение и возвращать другое монадическое значение?

  f :: a -> m b
  g :: m b -> m c
  h :: a -> m c

Функция связывания определяется как

(>>=) :: m a -> (ma -> m b) -> m b

Что в хаскеле запрещает функции принимать монадическое значение в качестве аргумента?

РЕДАКТИРОВАТЬ :Я думаю, что не прояснил свой вопрос. Дело в том, что когда вы составляете функции с помощью оператора связывания, почему второй аргумент для оператора связывания является функцией, которая принимает не -монадическое значение(b)? Почему он не может принимать монадическое значение(mb)и вернуть mc. Дело в том, что когда вы имеете дело с монадами, функция, которую вы будете составлять, всегда будет иметь следующий тип.

  f :: a -> m b
  g :: b -> m c
  h :: a -> m c

иh = f 'compose' g

Я пытаюсь изучить монады, и я не могу этого понять.

7
задан polapts 15 August 2012 в 10:44
поделиться