Haskell: Не могу понять, как использовать монадный стек трансформеров - PullRequest
3 голосов
/ 20 августа 2011

У меня есть тип

type T s r a = StateT [s] (ListT (Reader r)) a

Я хотел бы создать монадическое значение, которое возвращает каждое из текущих состояний

states :: T a r a

Но я чувствую себя глупо сегодня, иЯ не могу понять, как преобразовать значение T a r [a] в T a r a.

states = do
  as <- get
  -- insert magic
  return a

1 Ответ

5 голосов
/ 20 августа 2011

Выяснили выход

states = do
  as <- get
  a <- lift . ListT $ return as
  return a

Который может быть сжат до

states = get >>= lift . ListT . return

хорошо, чувствуйте себя умнее сейчас

...