В настоящее время я пишу проект, в котором я активно использую ListT
монадный преобразователь. При использовании простых списков реализовать недетерминизм очень просто. Однако как только мне пришлось преобразовать мой код в ListT
, все стало намного сложнее 1.
В качестве простого примера: преобразование из [a]
в ListT a
фактически требует составления двух функций:
conv :: (Monad m) => [a] -> ListT m a
conv = ListT . return
Хотя это просто, я удивлен, что этого еще нет.
Вопросы:
- Есть ли лучший способ справиться с недетерминизмом, когда требуется монадный преобразователь?
- Существуют ли какие-либо методы/библиотеки для чистого преобразования между списками и
ListT
?
1 Точные причины довольно сложны, поэтому я не хочу подробно останавливаться на этом.