MWE:
import Control.Monad.State.Lazy
fibStep :: State (Integer, Integer) ()
fibStep = state $ \(a, b) -> ((), (b, a + b))
execStateN :: Int -> State s a -> s -> s
execStateN n m s
| n == 1 = execState m s
| n > 1 = let s' = execState m s in
execStateN (n - 1) m s'
-- | n > 1 = execStateN (n - 1) m s' where s' = execState m s
| otherwise = error "undefined behaviour"
Это работает, но как только я раскомментирую вариант where
и прокомментирую вариант let
, выдается синтаксическая ошибка:
error: parse error on input '|'
Я проверил отступы, они в порядке. Что не так?