#haskell
#хаскелл #haskell
Вопрос:
Для упражнения, которое я выполняю, я реализовал тип данных, похожий на Maybe
:
type Some a = a
data Optional a = Some a | None
И функция:
safeRoot :: Double -> Optional Double
safeRoot x =
if x >= 0
then Some (sqrt x)
else None
Однако, если я попытаюсь запустить функцию из ghci следующим образом:
safeRoot 4
Я получаю:
No instance for (Show (Optional Double))
arising from a use of ‘print’
In a stmt of an interactive GHCi command: print it
Итак, как я могу определить формат печати для Optional
?
Комментарии:
1. Вы знаете, что ваш тип
Some
не связан с конструктором данных,Some
определенным как частьOptional
, верно?
Ответ №1:
Вы можете просто использовать deriving (Show)
для своего типа данных:
data Optional a = Some a | None deriving (Show)
Кроме того, ваш Optional
тип в основном такой же, как Maybe
, который используется в большинстве библиотек.