以下のコードを機能させようとしています。これは、function-as-next-stateを渡す有限状態マシンです。この関数はで呼び出されr
、結果のリストと次のfunction-as-next状態を返します。リストがなくなるまで呼び出しを続け、結果の連結を返します。モナドは、必要に応じてエラーをスローできるようにするエラーモナドです。
fsm f [] = return []
fsm f (r:rs) = do
(xs, f') <- f r
rest <- fsm f' rs
return $ xs ++ rest
エラーは次のとおりです。
Occurs check: cannot construct the infinite type: t1 = t0 -> m0 ([a0], t1)
In the first argument of `fsm', namely f'
私は以前に無限の型エラーを見たことがあり、それを回避する方法は型を。でラップすることであると理解していnewtype
ます。しかし、私はこれを行う方法を理解できません。
誰かが洞察を指摘できますか?