2017-04-07 22 views
7

Niedawno zacząłem przeglądać biblioteki rdzeniowe w Hackage i istnieje powtarzający się język, którego nie rozumiem. Oto przykład z ST module:składnia deklaracji monady 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) }}) 

W szczególności nie rozumiem (# new_s, r #). Zakładam, że drugi hash odnosi się do nieskrępowanej wartości, ale reszta jest dla mnie tajemnicą (prawdopodobnie coś związanego z "nowym stanem").

Odpowiedz