私はこの優れた論文「構造化グラフを使用した関数型プログラミング、ブルーノ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