【发布时间】:2016-03-12 22:46:49
【问题描述】:
我是 Haskell 的新手,我正在使用 llvm-general-ure-3.5.1.0 库:
https://hackage.haskell.org/package/llvm-general-pure-3.5.1.0/docs/
有一个基本的block数据类型,Named和name数据类型:
data BasicBlock = BasicBlock Name [Named Instruction] (Named Terminator)
deriving (Eq, Read, Show, Typeable, Data)
data Named a
= Name := a
| Do a
data Name
= Name String -- ^ a string name
| UnName Word -- ^ a number for a nameless thing
我遇到的问题是针对命名指令的模式匹配。
我的代码如下所示:
executeInstruction :: Named Instruction -> Memory -> Memory
executeInstruction inst mem =
case inst of
Add nsw nuw op0 op1 meta -> undefined
这给了我一个我期望的错误消息,我的类型与命名指令与指令不匹配。
所以我想去掉 Named 并只剩下一个指令。
stripN :: Named Instruction -> Instruction
stripN (Name n inst) = inst
这给出了这个错误:
构造函数 `Name' 应该有 1 个参数,但已经给出了 2 个参数 在模式中:命名 n inst
我理解错误。但是我看不到如何从命名指令中获取指令。
谢谢,
【问题讨论】: