GHCでコンパイルして実行すると、ループが検出されて中断します。Haskellプログラムは "loop"で中断しますが、私はそうではないはずです。
data Foo = Foo()
deriving (Eq,Show)
type Foop = Foo -> ((),Foo)
noOp :: Foop
noOp st = ((),st)
someOp :: Foop
someOp [email protected](Foo x) = ((),st)
(<+>) :: Foop -> Foop -> Foop
(<+>) f g st = let ((_,st'),(_,st'')) = ((f st),(g st')) in ((),st'')
main = print $ (noOp <+> someOp) $ Foo()
私はそうすべきではないと思いますが、ここにいくつかの変更があります。これはGHCのバグです
- 変更
data Foo
(noOp <+> someOp)
解体@(Foo x)
(someOp <+> noOp)
に削除変更newtype Foo
のか、それは私の欠如である:それらのそれぞれは、ループが離れて行かせます評価プロセスの理解?
let((_、st ')、〜(_、st' '))=(f st、g st') 'という反駁できないマッチを使用すれば十分です。 – leftaroundabout
@leftaroundabout「st」は最初に要求されたものではありませんか? 'let ... in(()、st '')'。さらに、一般的な場合、 'g'は非厳密である可能性があります。 – chi
ありがとう、それは洞察力があった。今、私のコードでは 'undefined 'はありません。なぜそれがループするのかまだ分かりません。あなたはまたそれについていくつか光を当てることができますか? –