簡體   English   中英

使用GHC 7.6.3編譯節儉教程的問題

[英]Issues compiling thrift tutorial with GHC 7.6.3

我嘗試使用ghc 7.6.3從thrift-0.9.0 / tutorial / hs編譯文件HaskellServer.hs無效。

在命令行上,我打電話給

節儉--gen hs tutorial.thrift

thrift --gen hs shared.thrift

沒有任何錯誤的工作。

之后,我嘗試用

ghc HaskellServer.hs

但我得到以下錯誤輸出:

[1 of 7] Compiling Shared_Types     ( Shared_Types.hs, Shared_Types.o ) [flags changed]
[2 of 7] Compiling SharedService_Iface ( SharedService_Iface.hs, SharedService_Iface.o ) [flags
changed]
[3 of 7] Compiling SharedService    ( SharedService.hs, SharedService.o ) [flags changed]
[4 of 7] Compiling Tutorial_Types   ( Tutorial_Types.hs, Tutorial_Types.o ) [flags changed]
[5 of 7] Compiling Calculator_Iface ( Calculator_Iface.hs, Calculator_Iface.o ) [flags changed]
[6 of 7] Compiling Calculator       ( Calculator.hs, Calculator.o ) [flags changed]
[7 of 7] Compiling Main             ( HaskellServer.hs, HaskellServer.o )

HaskellServer.hs:48:33:
    Couldn't match type `GHC.Int.Int32' with `Int'
    Expected type: Maybe Int
      Actual type: Maybe GHC.Int.Int32
    In the first argument of `fromJust', namely `k'
    In the second argument of `(!)', namely `(fromJust k)'
    In the second argument of `($)', namely `(myLog ! (fromJust k))'

HaskellServer.hs:73:60:
    Couldn't match type `Int' with `GHC.Int.Int32'
    Expected type: Maybe GHC.Int.Int32
      Actual type: Maybe Int
    In the `f_InvalidOperation_what' field of a record
    In the second argument of `($)', namely
      `InvalidOperation
         {f_InvalidOperation_what = Just $ fromEnum $ op work,
          f_InvalidOperation_why = Just "Cannot divide by 0"}'
    In the expression:
      throw
      $ InvalidOperation
          {f_InvalidOperation_what = Just $ fromEnum $ op work,
           f_InvalidOperation_why = Just "Cannot divide by 0"}

HaskellServer.hs:74:64:
    Couldn't match expected type `Data.Text.Lazy.Internal.Text'
                with actual type `[Char]'
    In the first argument of `Just', namely `"Cannot divide by 0"'
    In the `f_InvalidOperation_why' field of a record
    In the second argument of `($)', namely
      `InvalidOperation
         {f_InvalidOperation_what = Just $ fromEnum $ op work,
          f_InvalidOperation_why = Just "Cannot divide by 0"}'

HaskellServer.hs:79:53:
    Couldn't match type `[Char]' with `Data.Text.Lazy.Internal.Text'
    Expected type: Data.Text.Lazy.Internal.Text
      Actual type: String
    In the return type of a call of `show'
    In the first argument of `Just', namely `(show val)'
    In the second argument of `SharedStruct', namely
      `(Just (show val))'

HaskellServer.hs:80:52:
    Couldn't match expected type `Int' with actual type `GHC.Int.Int32'
    In the first argument of `M.insert', namely `logid'
    In the second argument of `(.)', namely `(M.insert logid logEntry)'
    In the second argument of `($)', namely
      `return . (M.insert logid logEntry)'

顯然,類型有問題,但是我不能說這是我的特定GHC版本還是節儉本身的問題。

這是第一個錯誤消息的代碼(HaskellServer.hs:48:33):

instance SharedService_Iface CalculatorHandler where
  getStruct self k = do
    myLog <- readMVar (mathLog self)
    return $ (myLog ! (fromJust k))

有人可以指出我正確的方向嗎?


更新

生成的節儉文件列出了使用的編譯標志:

{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}
{-# OPTIONS_GHC -fno-warn-missing-fields #-}
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}

在不看更多代碼的情況下很難知道您實際使用的類型,但是我有一種直覺,節儉會生成期望GHC.Int.Int32東西,而您的代碼GHC.Int.Int32期望Int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM