компиляция / исправление ошибок типа monadiccp - PullRequest
1 голос
/ 05 октября 2011

Если бы кто-нибудь мог помочь мне разобраться в этой проблеме с компиляцией monadiccp, я был бы признателен. Есть проблема с печатанием, которую я не могу понять.

шага для воспроизведения

  • у вас установлена ​​достаточно свежая версия ghc; У меня 7.0.3
  • cabal install Monatron
  • cabal unpack monadiccp
  • ghci Control/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

ошибки типов становятся еще более непонятными (мне, вероятно, нужно научиться печатать формально),

Control/CP/ComposableTransformers.hs:247:19:
    Couldn't match type `a10' with `a1'
      because type variable `a1' would escape its scope
    This (rigid, skolem) type variable is bound by
      a type expected by the context: Tree solver a1 -> Tree solver a1
    The following variables have types that mention a10
      x :: Tree solver a10 -> Tree solver a10
        (bound at Control/CP/ComposableTransformers.hs:246:12)
    In the second argument of `BBP', namely `x'
    In the second argument of `($)', namely `BBP (v + 1) x'
    In the expression: continue $ BBP (v + 1) x

любая информация о ситуации будет наиболее ценной (включая решение проблемы). Я недавно отправил электронное письмо разработчику, но он не вернулся.

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Я не уверен на 100%, что происходит, но просто переписав do-block вручную, он скомпилировался для меня:

  returnCT (CBBST newBound) (BBP v bound) continue exit =
    newBound >>= continue . BBP (v + 1)
1 голос
/ 02 ноября 2011

Я мог бы получить 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 через эти определения. Я вполне уверен, что измененный код означает то же самое, что и намерение оригинала.

К сожалению, как говорит автор оригинального вопроса, есть множество других ошибок компиляции.

...