У меня есть следующий тип данных:
data Ops = Add | Sub | Mul | Div | Mod
И эта функция:
charToOp :: Char -> Ops
charToOp x
| x == '+' = Add
| x == '-' = Sub
| x == '*' = Mul
| x == '/' = Div
| x == '%' = Mod
В GHCI, если я попробую charToOp '+'
, я получу следующее сообщение:
*** No instance for (Show Ops) arising from a use of `print'
* In a stmt of an interactive GHCi command: print it**.
Как это исправить?
0
mil236
5 Апр 2020 в 02:09
1 ответ
Для вашего типа данных нет экземпляра Show
, попробуйте добавить следующее:
data Ops = Add | Sub | Mul | Div | Mod deriving (Show)
Теперь это работает:
*Main> charToOp '-'
Sub
Кроме того, вы также можете создать свой собственный экземпляр Show
Боковое примечание: вы можете использовать сопоставление с образцом вместо охранников.
charToOp :: Char -> Ops
charToOp x = case x of
'+' -> Add
'-' -> Sub
'*' -> Mul
'/' -> Div
'%' -> Mod
4
Meowcolm Law
5 Апр 2020 в 02:24
Похожие вопросы
Новые вопросы
haskell
Haskell — это чисто функциональный язык программирования со строгой статической типизацией, отложенными вычислениями, обширной поддержкой параллелизма и параллелизма, а также уникальными возможностями абстракции.