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