Я новичок в Haskell и я использую LLVM-общий-Юр-3.5.1.0 библиотеку:Haskell сопоставления с образцом в LLVM-общей-чистой библиотеке
https://hackage.haskell.org/package/llvm-general-pure-3.5.1.0/docs/
Там есть базовый тип блока данных , Именованный и названный тип данных:
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
Это дает мне сообщение об ошибке, что я ожидал, мои типы не совпадают поименованных Инструкции против Инструкции.
Так что я хочу снять с Именованного и оставить только инструкцию.
stripN :: Named Instruction -> Instruction
stripN (Name n inst) = inst
Это дает эту ошибку:
Конструктор `Name» должен иметь 1 аргумент, но было дано 2 В схеме: Имя п инст
Я понимаю ошибку. Но я не понимаю, как получить только инструкцию от именованной инструкции.
Спасибо,
Спасибо, что установил ее. – user2297034
Один быстрый вопрос: что такое оператор: =? – user2297034
@ user2297034 Я на самом деле понятия не имею, я только что нашел об этом в вашем вопросе: 'data Named a = Name: = a | Сделайте a'. Итак, ': =' является одним из конструкторов 'Named'. Я предполагаю, что «Именованная инструкция» - это просто insn ('Do insn') или помеченные insns с именем (' name: = insn'). Я не знаю, как это точно используется в библиотеке. – chi