Gần đây tôi đã bắt đầu xem các thư viện lõi trên Hackage, và có một thành ngữ định kỳ mà tôi không hiểu. Dưới đây là ví dụ từ số ST module:cú pháp của khai báo ST monad
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) }})
Cụ thể, tôi không hiểu (# new_s, r #)
. Tôi giả định băm thứ hai đề cập đến một giá trị unboxed, nhưng phần còn lại là một bí ẩn đối với tôi (một cái gì đó để làm với "nhà nước mới", có lẽ).
Nói chung, '#' trong Haskell có nghĩa là nó đang làm một số loại cấp độ thấp và/hoặc nguyên thủy. Bạn phải bật phần mở rộng ngôn ngữ 'MagicHash' để thậm chí sử dụng' # 'trong tên. – Lazersmoke