Определение формата печати для пользовательского типа данных

#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 , который используется в большинстве библиотек.