7
最近私は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 #)
を理解していない:ここでST moduleからの例です。私は、2番目のハッシュがボックス化されていない値を参照していると仮定しますが、残りは私にとって謎です(おそらく "新しい状態"と関係がある)。
一般的に、Haskellの '# 'は、ある種の低レベルやプリミティブなことをしていることを意味します。名前に '#'を使用するには、MagicHash言語拡張を有効にする必要があります。 – Lazersmoke