Синтаксис объявления монады ST

Недавно я начал изучать основные библиотеки на Hackage, и есть повторяющаяся идиома, которую я не понимаю. Вот пример из модуля ST:

instance Monad (ST s) where
    {-# INLINE (>>=)  #-}
    (>>) = (*>)
    (ST m) >>= k
      = ST (\ s ->
        case (m s) of { (# new_s, r #) ->
        case (k r) of { ST k2 ->
        (k2 new_s) }})

В частности я не понимаю (# new_s, r #), Я предполагаю, что второй хэш относится к незарегистрированному значению, но остальное для меня загадка (возможно, что-то связанное с "новым состоянием").

1 ответ

Решение

(# x, y, z #) это незагруженный кортеж с тремя элементами. См. "8.2.2. Распакованные кортежи" по адресу https://downloads.haskell.org/~ghc/6.8.3/docs/html/users_guide/primitives.html.

Остальное в основном просто реализация государства.

Другие вопросы по тегам