2016-10-24 4 views
0

Для упражнений, которые я делаю, я реализовал тип данных, который похож на 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?

+2

Вы знаете, что ваш тип 'Some' не имеет отношения к конструктору данных' Some', определенному как часть 'Optional', правильно? – chepner

ответ

4

Вы можете просто использовать deriving (Show) от типа данных:

data Optional a = Some a | None deriving (Show) 

Кроме того, ваш Optional типа в основном такой же, как Maybe, что и используются во многих библиотеках.

Смежные вопросы