私はこの優れた論文「構造化グラフを使用した関数型プログラミング、ブルーノC. d。S.オリベイラ」(ここにいくつかのビデオ)を読んでおり、すべての構造を実装しようとしています。私は実存主義の使用に苦労しています。著者はHaskellthroghoutについて言及していますが、タイプはCoqまたはAgdaでより簡単に表現されるようです。どうすればこれをコンパイルできますか?ありがとう。
コード
data PStream a v = Var v
| Mu (v -> PStream a v)
| Cons a (PStream a v)
data Stream a = forall v. Pack {pop :: PStream a v}
foldStream :: (a -> b -> b) -> b -> Stream a -> b
foldStream f k (Pack s) = pfoldStream s
where pfoldStream (Var x) = x
pfoldStream (Mu g) = pfoldStream (g k)
pfoldStream (Cons x xs) = f x (pfoldStream xs)
エラー
error:
Couldn't match type `v' with `b'
`v' is a rigid type variable bound by
a pattern with constructor
Pack :: forall a v. PStream a v -> Stream a,
in an equation for `foldStream'
at C:\...\StructuredGraph.hs:17:17
`b' is a rigid type variable bound by
the type signature for
foldStream :: (a -> b -> b) -> b -> Stream a -> b
at C:\...\StructuredGraph.hs:17:1
Expected type: PStream a b
Actual type: PStream a v
In the first argument of `pfoldStream', namely `s'
In the expression: pfoldStream s