首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell回跳编译错误

Haskell回跳编译错误
EN

Stack Overflow用户
提问于 2017-05-05 11:31:31
回答 1查看 30关注 0票数 0

所以我想我会有一些有趣的分析一些AIS数据与回旋镖,我是绊脚石在第一个障碍。编译错误令人困惑。在我试图解决这个问题之前,我已经解析了类似的东西。

图书馆很简单。我定义了一些基本类型及其解析器/语法:

代码语言:javascript
复制
import           Control.Category      (id, (.))
import           Control.Monad         (forever)
import           Prelude               hiding (id, (.))
import           System.IO             (hFlush, stdout)
import           Text.Boomerang
import           Text.Boomerang.String
import           Text.Boomerang.TH

data MessageType = AIVDM | AIVDO deriving (Enum, Eq, Show)

data AIS = AIS {
              msgType :: MessageType
          } deriving (Eq, Show)

$(makeBoomerangs ''MessageType)
$(makeBoomerangs ''AIS)

messageTypeP :: StringBoomerang () (MessageType :- ())
messageTypeP = rAIVDM . "!AIVDM" <> rAIVDO . "!AIVDO"

aisP :: StringBoomerang () (AIS :- ())
aisP = rAIS . messageTypeP . lit ","

现在,我希望支持在消息类型之后出现的句子计数值;我将一个Int添加到AIS

代码语言:javascript
复制
data AIS = AIS {
              msgType :: MessageType, sCount :: Int
          } deriving (Eq, Show)

并更改解析器/打印机:

代码语言:javascript
复制
aisP :: StringBoomerang () (AIS :- ())
aisP = rAIS . messageTypeP . lit "," . int

但它未能编译:

代码语言:javascript
复制
• Couldn't match type ‘()’ with ‘Int :- ()’
  Expected type: Boomerang
                   StringError String () (MessageType :- (Int :- ()))
    Actual type: Boomerang StringError String () (MessageType :- ())
• In the second argument of ‘(.)’, namely
    ‘messageTypeP . lit "," . int’
  In the expression: rAIS . messageTypeP . lit "," . int
  In an equation for ‘aisP’:
      aisP = rAIS . messageTypeP . lit "," . int

唉哟。救命求你了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-05 13:59:05

回旋镖应该是多态的。

代码语言:javascript
复制
messageTypeP :: StringBoomerang r (MessageType :- r)

aisP :: StringBoomerang r (AIS :- r)

其解释是,r是一堆类型,而回旋镖则是从/推到它的pop/push类型。将r设置为()强制输入堆栈为空,这会损害这些回旋镖的可重用性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43803875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档