Должно ли оборачивание функций в преобразователь монад считаться плохой практикой?

Допустим, мы хотим использовать ReaderT [(a, b)] вместо ] Может быть монада, а затем мы хотим выполнить поиск в списке.

Теперь простой и не слишком необычный способ сделать это:

первая возможность

find a = ReaderT (lookup a)

Однако, похоже, что это утверждает некоторая нетривиальная вещь о том, как работает преобразователь ReaderT. Глядя на исходный код Control.Monad.Reader, становится ясно, что это работает нормально. Но я не читал никакой документации, подтверждающей это. Однако мы могли бы также написать поиск так:

вторая возможность

find a = do  y <- ask 
             lift (lookup a y)

Подобные идеи справедливы для упаковки MaybeT , StateT , State и Reader . Обычно я пишу что-то вроде первого примера, но в большинстве случаев действительно очевидно, как написать это, как второй пример, и можно даже сказать, что это более читабельно. Итак, мой вопрос: следует ли считать код, подобный первому, плохим?

7
задан Petr Pudlák 11 October 2012 в 12:29
поделиться