Используйте функцию a → b в качестве "монадической" функции a → m b

В настоящее время я играю с основами 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 ответ

Решение

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

composed = divideTenBy . (*10) <=< divideTenBy . (-)5
Другие вопросы по тегам