私の開発中、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
| ^^^^^^^^^^^^^^^^^^