Используйте функцию a → b в качестве «монадической» функции a → mb - PullRequest
5 голосов
/ 01 апреля 2012

В настоящее время я играю с основами Haskell и наткнулся на следующий «вариант использования»:

ghci> let divideTenBy x | x == 0 = Nothing | otherwise = Just (10 / x)
ghci> let composed = divideTenBy <=< return . (*10) <=< divideTenBy <=< return . (-)5
ghci> Just 5 >>= composed
Nothing
ghci> Just 10 >>= composed
Just (-0.5)

Так что я в основном смешиваю монадические и чистые функции здесь и объединяю их в монадическую функцию.Это работает, но return . (*10) кажется мне обычно необходимой вещью, поэтому я испытываю желание определить сокращение для него, что-то вроде monadify = (return.).

Прежде чем я это сделаю, я 'Я хотел бы спросить, есть ли уже помощники, чтобы иметь дело с такой ситуацией.Конечно, я мог бы также быть смущен обо всем этом, и есть причины, почему это не должно быть сделано.Если это так, пожалуйста, скажите мне.

1 Ответ

7 голосов
/ 01 апреля 2012

Нет причин не делать этого. Однако это редко необходимо. Например, ваш вариант использования может быть переписан как

composed = divideTenBy . (*10) <=< divideTenBy . (-)5
...