0

私の開発中、alex/happy を手動で実行してパーサー ファイルを生成し、ghci を実行してコードをテストしてきました。これは問題なく動作し、GHCI に読み込まれますがcabal repl、プログラムを実行するとファイルにエラーがスローされParser.hsます。

エラーは型エラーです:Couldn't match type '[a]' with 'Expression'しかし、このコードを手動でテストしていたときはいつでもghci main、コードは正常に動作しますか?

cabal がどのように機能するかを完全に理解していないかどうかはわかりませんが、happy から生成された haskell パーサーと cabal から生成された haskell パーサーがまったく異なることに気付きました。

以下に、cabal build コマンドのエラー メッセージの冒頭を添付しました。

編集

したがって、cabal ビルドが実行されるたびに Alec が指摘したように、それは-agcフラグに満足して呼び出されますが、私はこれに気づいていなかったため、コードを微調整する必要がありました。

解決策は、フラグを使用して Happy パーサーをビルドし、-agcそのようにコンパイルされるようにすることです。これにより、結果のパーサーがわずかに異なるため、パーサー内でいくつかの新しいエラーが発生する可能性がありますが、私の調査によるとcabal repl、前述のフラグなしで幸せに実行する方法はありません。

  PS D:\Documents\GitHub\solidiscan> cabal build
  Preprocessing executable 'solidiscan' for solidiscan-0.1.0.0..
  Building executable 'solidiscan' for solidiscan-0.1.0.0..
  [3 of 6] Compiling Solidiscan.Parser ( dist\build\solidiscan\solidiscan-tmp\Solidiscan\Parser.hs, dist\build\solidiscan\solidiscan-tmp\Solidiscan\Parse
  r.o )

  dist\build\solidiscan\solidiscan-tmp\Solidiscan\Parser.hs:2429:42: error:
      * Couldn't match type `[a]' with `Expression'
        Expected type: HappyAbsSyn
                        [SourceUnit]
                        SourceUnit
                        [Char]
                        [Char]
                        Token
                        InheritanceSpec
                        InheritanceSpecifier
                        InheritanceSpecifier
                        [Expression]
                        Expression
                        [[Expression]]
                        [Expression]
                        [EnumValue]
                        EnumValue
                        [[EParameters]]
                        [EParameters]
                        EParameters
                        Token
                        [[Parameter]]
                        [Parameter]
                        Parameter
                        ReturnParam
                        [Expression]
                        Token
                        Token
                        PublicKeyword
                        [a]
                        [a]
                        [Expression]
                        Expression
                        TypeName
                        [Expression]
                        Expression
                        Expression
                        Expression
                        Expression
                        ElseState
                        Int
                        TypeName
                        ElemType
                        [Expression]
                        [ContractConts]
                        [EParameters]
                        [Expression]
                        [FuncMods]
                        [[Expression]]
                        [EnumValue]
                        [InheritanceSpecifier]
                        [Parameter]
                        [Expression]
                        [Token]
                        [PublicKeyword]
                        [ElseState]
                        [[[EParameters]]]
                        [[EParameters]]
                        [Expression]
                        [[Expression]]
                        [InheritanceSpec]
                        [Expression]
                        [[[Parameter]]]
                        [[Parameter]]
                        [ReturnParam]
                        [StorageLocation]
                        [Expression]
                        [ContractConts]
                        [EParameters]
                        [Expression]
                        [FuncMods]
                        [[Expression]]
                        [EnumValue]
                        [InheritanceSpecifier]
                        [Parameter]
                        [Expression]
                      -> HappyAbsSyn
                            [SourceUnit]
                            SourceUnit
                            [Char]
                            [Char]
                            Token
                            InheritanceSpec
                            InheritanceSpecifier
                            InheritanceSpecifier
                            [Expression]
                            Expression
                            [[Expression]]
                            [Expression]
                            [EnumValue]
                            EnumValue
                            [[EParameters]]
                            [EParameters]
                            EParameters
                            Token
                            [[Parameter]]
                            [Parameter]
                            Parameter
                            ReturnParam
                            [Expression]
                            Token
                            TypeName
                            PublicKeyword
                            [a]
                            Expression
                            [Expression]
                            Expression
                            TypeName
                            [Expression]
                            Expression
                            Expression
                            Expression
                            Expression
                            ElseState
                            Int
                            TypeName
                            ElemType
                            [Expression]
                            [ContractConts]
                            [EParameters]
                            [Expression]
                            [FuncMods]
                            [[Expression]]
                            [EnumValue]
                            [InheritanceSpecifier]
                            [Parameter]
                            [Expression]
                            [Token]
                            [PublicKeyword]
                            [ElseState]
                            [[[EParameters]]]
                            [[EParameters]]
                            [Expression]
                            [[Expression]]
                            [InheritanceSpec]
                            [Expression]
                            [[[Parameter]]]
                            [[Parameter]]
                            [ReturnParam]
                            [StorageLocation]
                            [Expression]
                            [ContractConts]
                            [EParameters]
                            [Expression]
                            [FuncMods]
                            [[Expression]]
                            [EnumValue]
                            [InheritanceSpecifier]
                            [Parameter]
                            [Expression]
          Actual type: HappyAbsSyn
                        [SourceUnit]
                        SourceUnit
                        [Char]
                        [Char]
                        Token
                        InheritanceSpec
                        InheritanceSpecifier
                        InheritanceSpecifier
                        [Expression]
                        Expression
                        [[Expression]]
                        [Expression]
                        [EnumValue]
                        EnumValue
                        [[EParameters]]
                        [EParameters]
                        EParameters
                        Token
                        [[Parameter]]
                        [Parameter]
                        Parameter
                        ReturnParam
                        [Expression]
                        Token
                        Token
                        PublicKeyword
                        [a]
                        [a]
                        [Expression]
                        Expression
                        TypeName
                        [Expression]
                        Expression
                        Expression
                        Expression
                        Expression
                        ElseState
                        Int
                        TypeName
                        ElemType
                        [Expression]
                        [ContractConts]
                        [EParameters]
                        [Expression]
                        [FuncMods]
                        [[Expression]]
                        [EnumValue]
                        [InheritanceSpecifier]
                        [Parameter]
                        [Expression]
                        [Token]
                        [PublicKeyword]
                        [ElseState]
                        [[[EParameters]]]
                        [[EParameters]]
                        [Expression]
                        [[Expression]]
                        [InheritanceSpec]
                        [Expression]
                        [[[Parameter]]]
                        [[Parameter]]
                        [ReturnParam]
                        [StorageLocation]
                        [Expression]
                        [ContractConts]
                        [EParameters]
                        [Expression]
                        [FuncMods]
                        [[Expression]]
                        [EnumValue]
                        [InheritanceSpecifier]
                        [Parameter]
                        [Expression]
                      -> HappyAbsSyn
                            [SourceUnit]
                            SourceUnit
                            [Char]
                            [Char]
                            Token
                            InheritanceSpec
                            InheritanceSpecifier
                            InheritanceSpecifier
                            [Expression]
                            Expression
                            [[Expression]]
                            [Expression]
                            [EnumValue]
                            EnumValue
                            [[EParameters]]
                            [EParameters]
                            EParameters
                            Token
                            [[Parameter]]
                            [Parameter]
                            Parameter
                            ReturnParam
                            [Expression]
                            Token
                            TypeName
                            PublicKeyword
                            [a]
                            Expression
                            [Expression]
                            Expression
                            TypeName
                            [Expression]
                            Expression
                            Expression
                            Expression
                            Expression
                            ElseState
                            Int
                            TypeName
                            ElemType
                            [Expression]
                            [ContractConts]
                            [EParameters]
                            [Expression]
                            [FuncMods]
                            [[Expression]]
                            [EnumValue]
                            [InheritanceSpecifier]
                            [Parameter]
                            [Expression]
                            [Token]
                            [PublicKeyword]
                            [ElseState]
                            [[[EParameters]]]
                            [[EParameters]]
                            [Expression]
                            [[Expression]]
                            [InheritanceSpec]
                            [[a]]
                            [[[Parameter]]]
                            [[Parameter]]
                            [ReturnParam]
                            [StorageLocation]
                            [Expression]
                            [ContractConts]
                            [EParameters]
                            [Expression]
                            [FuncMods]
                            [[Expression]]
                            [EnumValue]
                            [InheritanceSpecifier]
                            [Parameter]
                            [Expression]
      * In the second argument of `happySpecReduce_1', namely
          `happyReduction_161'
        In the expression: happySpecReduce_1 81# happyReduction_161
        In an equation for `happyReduce_161':
            happyReduce_161 = happySpecReduce_1 81# happyReduction_161
      * Relevant bindings include
          happyReduce_161 :: Happy_GHC_Exts.Int#
                            -> Token
                            -> Happy_GHC_Exts.Int#
                            -> Happy_IntList
                            -> HappyStk
                                  (HappyAbsSyn
                                    [SourceUnit]
                                    SourceUnit
                                    [Char]
                                    [Char]
                                    Token
                                    InheritanceSpec
                                    InheritanceSpecifier
                                    InheritanceSpecifier
                                    [Expression]
                                    Expression
                                    [[Expression]]
                                    [Expression]
                                    [EnumValue]
                                    EnumValue
                                    [[EParameters]]
                                    [EParameters]
                                    EParameters
                                    Token
                                    [[Parameter]]
                                    [Parameter]
                                    Parameter
                                    ReturnParam
                                    [Expression]
                                    Token
                                    TypeName
                                    PublicKeyword
                                    [a]
                                    Expression
                                    [Expression]
                                    Expression
                                    TypeName
                                    [Expression]
                                    Expression
                                    Expression
                                    Expression
                                    Expression
                                    ElseState
                                    Int
                                    TypeName
                                    ElemType
                                    [Expression]
                                    [ContractConts]
                                    [EParameters]
                                    [Expression]
                                    [FuncMods]
                                    [[Expression]]
                                    [EnumValue]
                                    [InheritanceSpecifier]
                                    [Parameter]
                                    [Expression]
                                    [Token]
                                    [PublicKeyword]
                                    [ElseState]
                                    [[[EParameters]]]
                                    [[EParameters]]
                                    [Expression]
                                    [[Expression]]
                                    [InheritanceSpec]
                                    [Expression]
                                    [[[Parameter]]]
                                    [[Parameter]]
                                    [ReturnParam]
                                    [StorageLocation]
                                    [Expression]
                                    [ContractConts]
                                    [EParameters]
                                    [Expression]
                                    [FuncMods]
                                    [[Expression]]
                                    [EnumValue]
                                    [InheritanceSpecifier]
                                    [Parameter]
                                    [Expression])
                            -> [Token]
                            -> HappyIdentity
                                  (HappyAbsSyn
                                    [SourceUnit]
                                    SourceUnit
                                    [Char]
                                    [Char]
                                    Token
                                    InheritanceSpec
                                    InheritanceSpecifier
                                    InheritanceSpecifier
                                    [Expression]
                                    Expression
                                    [[Expression]]
                                    [Expression]
                                    [EnumValue]
                                    EnumValue
                                    [[EParameters]]
                                    [EParameters]
                                    EParameters
                                    Token
                                    [[Parameter]]
                                    [Parameter]
                                    Parameter
                                    ReturnParam
                                    [Expression]
                                    Token
                                    TypeName
                                    PublicKeyword
                                    [a]
                                    Expression
                                    [Expression]
                                    Expression
                                    TypeName
                                    [Expression]
                                    Expression
                                    Expression
                                    Expression
                                    Expression
                                    ElseState
                                    Int
                                    TypeName
                                    ElemType
                                    [Expression]
                                    [ContractConts]
                                    [EParameters]
                                    [Expression]
                                    [FuncMods]
                                    [[Expression]]
                                    [EnumValue]
                                    [InheritanceSpecifier]
                                    [Parameter]
                                    [Expression]
                                    [Token]
                                    [PublicKeyword]
                                    [ElseState]
                                    [[[EParameters]]]
                                    [[EParameters]]
                                    [Expression]
                                    [[Expression]]
                                    [InheritanceSpec]
                                    [Expression]
                                    [[[Parameter]]]
                                    [[Parameter]]
                                    [ReturnParam]
                                    [StorageLocation]
                                    [Expression]
                                    [ContractConts]
                                    [EParameters]
                                    [Expression]
                                    [FuncMods]
                                    [[Expression]]
                                    [EnumValue]
                                    [InheritanceSpecifier]
                                    [Parameter]
                                    [Expression])
            (bound at dist\build\solidiscan\solidiscan-tmp\Solidiscan\Parser.hs:2429:1)
      |
  2429 | happyReduce_161 = happySpecReduce_1  81# happyReduction_161
      |                                          ^^^^^^^^^^^^^^^^^^
4

0 に答える 0