0

Throughout my development i've been manually running alex/happy to generate my parser files and then running ghci to test the code. This works fine and loads me into GHCI, but whenever I run cabal repl the program throws an error in my Parser.hs file.

The error is a type error: Couldn't match type '[a]' with 'Expression' but whenever I'd been testing this code manually with ghci main the code runs fine?

I'm not sure if I'm not fully understanding how cabal works but I've noticed that the haskell parser generated from happy, and from cabal are quite different.

I've attached the start of the error message for the cabal build command below.

Edit

So as pointed out by Alec whenever cabal build is ran it invokes happy with the -agc flags, I wasn't aware for this and because of it my code needed tweaking.

The solution is to build the Happy parser with the -agc flags and ensure it compiles that way. This may lead to some new errors within your parser as the resultant parsers differ slightly but from my research there is no way for cabal repl to run with happy without the aforementioned flags.

  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
      |                                          ^^^^^^^^^^^^^^^^^^
Sheldor
  • 11
  • 4
  • Tool output is text. Please include it in your post as text, not as links to images. – Carl Mar 07 '18 at 00:28
  • @Carl I've updated my post now with the start of the error message, it was too big to fit into the question. – Sheldor Mar 07 '18 at 01:53
  • Which version of Happy are you using? I fixed a couple of similar looking bugs in Happy not too long ago. Similar in the errors generated, as well as the setup. Did you know that cabal automatically calls Happy with `-agc`? – Alec Mar 07 '18 at 03:14
  • I'm using Happy version 1.19.8, and no i wasn't aware that cabal called it with `-agc`, thats probably why it's failing. – Sheldor Mar 07 '18 at 13:22
  • @Sheldor if you have an answer, can you post it so as to resolve this for future readers? – sclv Mar 17 '18 at 23:28

0 Answers0