2017-04-07 30 views
7

Son zamanlarda, Hackage'deki çekirdek kitaplıklarına bakmaya başladım ve anlamadığım yinelenen bir deyim var.ST monad bildiriminin sözdizimi

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) }}) 

Özellikle, (# new_s, r #) anlamıyorum: Burada ST module den bir örnek. İkinci hashın kutudan çıkarılmış bir değere atıfta bulunduğunu sanıyorum, ama geri kalan kısım benim için bir gizem (muhtemelen "yeni devlet" ile ilgili bir şey).

cevap

7

(# x, y, z #) üç öğeli kutudan çıkarılmamış bir kutudur. https://downloads.haskell.org/~ghc/6.8.3/docs/html/users_guide/primitives.html numaralı telefondan "8.2.2. Kutusuz Tupler" bölümüne bakın. Geri kalan temel olarak sadece bir Devlet uygulamasıdır.

+3

Genel olarak, Haskell'de '' 'bir çeşit düşük seviye ve/veya ilkel şeyler yapıyor demektir. '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – Lazersmoke