私は現在、入力した次の関数ttを書くことができますどのようにエラー: 私は ttで runST、内側 s変数の状態が機能 fにねじ込むことができると考え t :: Int
t = runST $ do
ref <- newSTRef 10
readSTRef ref
tt :: (STRef s a -> ST s a) -> Int
tt f = runST $ do
私は再帰関数を作成しようとしていますが、簡単にするためにリストとリストを作成してビルドしています。配列の作成と読み込みの両方を行う必要があるので、私は可変配列を使用しているので、一定の時間の読み書きができます。だから、署名と機能次のように次のようになります。 f :: [a] -> ST s ([a], STArray s Int a) -> ST s ([a], STArray s Int a)
最近私はHackageのコアライブラリを見始めました。私は理解できない繰り返しのイディオムがあります。 instance Monad (ST s) where
{-# INLINE (>>=) #-}
(>>) = (*>)
(ST m) >>= k
= ST (\ s ->
case (m s) of { (# new_s, r #) ->