Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 编译/修复monadiccp类型错误_Generics_Haskell_Types_Typeerror - Fatal编程技术网

Generics 编译/修复monadiccp类型错误

Generics 编译/修复monadiccp类型错误,generics,haskell,types,typeerror,Generics,Haskell,Types,Typeerror,如果有人能通过编译monadiccp来帮助我研究这个问题,我将不胜感激。有一个打字问题我不明白 复制步骤 安装合理的ghc最新版本;我有7.0.3 cabal安装Monatron cabal解包monadiccp ghci控制/CP/ComposableTransformers.hs 我得到这个错误 Control/CP/ComposableTransformers.hs:246:31: Couldn't match expected type `Tree solver0 a1 -&

如果有人能通过编译monadiccp来帮助我研究这个问题,我将不胜感激。有一个打字问题我不明白

复制步骤
  • 安装合理的ghc最新版本;我有7.0.3
  • cabal安装Monatron
  • cabal解包monadiccp
  • ghci控制/CP/ComposableTransformers.hs
我得到这个错误

Control/CP/ComposableTransformers.hs:246:31:
    Couldn't match expected type `Tree solver0 a1 -> Tree solver0 a1'
                with actual type `forall a2. Tree solver a2 -> Tree solver a2'
    Expected type: Tree solver0 a1 -> Tree solver0 a1
      Actual type: Bound solver
    In the second argument of `BBP', namely `bound''
    In the second argument of `($)', namely `BBP (v + 1) bound''
Failed, modules loaded: Control.CP.Transformers, Control.CP.SearchTree, Control.CP.Solver, Control.CP.Queue, Control.CP.Debug, Control.CP.PriorityQueue, Control.Mixin.Mixin.
这是一个奇怪的观察。如果有人改变了这条线

   continue $ BBP (v + 1) bound' 
以错误中给定的类型为特征

   continue $ BBP (v + 1) (undefined :: Tree solver0 a1 -> Tree solver0 a1)
然后它就工作了,但是如果引入一个伪变量

   let x = (undefined :: Tree solver0 a1 -> Tree solver0 a1)
   continue $ BBP (v + 1) x
类型错误变得更加难以理解(我可能需要正式学习类型)


如果您能了解情况(包括解决问题),我们将不胜感激。我不久前给开发人员发了一封电子邮件,但他没有回复。

我不是100%确定发生了什么,只是简单地手动重写do块就可以为我编译了:

  returnCT (CBBST newBound) (BBP v bound) continue exit =
    newBound >>= continue . BBP (v + 1)

我可以通过稍微丑化一些类型定义来编译
ComposableTransformers.hs
,如下所示:

newtype CBranchBoundST solver a = CBBST (NewBound solver a)
data    BBEvalState solver a  = BBP Int (Bound solver a)

type Bound    solver a  = Tree solver a -> Tree solver a
type NewBound solver a  = solver (Bound solver a)

instance (Solver solver) => CTransformer (CBranchBoundST solver a)
where
  type CEvalState (CBranchBoundST solver a) = BBEvalState solver a
基本上,我只是将一个类型变量
a
穿过这些定义。我确信修改后的代码与原始代码的意图是一致的


不幸的是,正如最初的问题提问者所说,出现了许多其他编译错误。

太好了,非常感谢!看起来还有很多错误。。。这是一个非常奇怪的问题。
newtype CBranchBoundST solver a = CBBST (NewBound solver a)
data    BBEvalState solver a  = BBP Int (Bound solver a)

type Bound    solver a  = Tree solver a -> Tree solver a
type NewBound solver a  = solver (Bound solver a)

instance (Solver solver) => CTransformer (CBranchBoundST solver a)
where
  type CEvalState (CBranchBoundST solver a) = BBEvalState solver a