3

typeHaskellをdata次のコードで試してみたい

type Program a = Maybe a -> (Operation a, Maybe Program a)
data Operation a = Read a | Write a

Program継続渡しスタイル (CPS) に従い、Nothing終了を示します。または何か他のものaでインスタンス化できます。Int

しかし、GHC は次のように不満を述べています。

main.hs:1:1:
    Cycle in type synonym declarations:
      main.hs:1:1-58: type Program a =
                          Maybe a -> (Operation a, Maybe Program a)

私は Haskell を初めて使用するので、これが許可されていない理由がわかりません。この型を Haskell で表現するにはどうすればよいですか?

4

1 に答える 1

8

ここには2つの問題があります。

  • あるべきでMaybe (Program a)はなくMaybe Program a
  • タイプの同義語を再帰的にすることはできません

動作するバージョンは次のとおりです。

newtype Program a = Program { runProgram :: Maybe a -> (Operation a, Maybe (Program a)) }
data Operation a = Read a | Write a
于 2012-12-06T05:33:52.647 に答える