在Haskell中打印新类型

Ala*_*lan 1 haskell types ghci

我正在按照教程创建一个新类型.这是我的代码:

data Shape = Circle Float Float Float | Rectangle Float Float Float Float
Run Code Online (Sandbox Code Playgroud)

当我用ghci加载文件时,我键入:

Circle 10 20 5
Run Code Online (Sandbox Code Playgroud)

它打印这个:

<interactive>:29:1:
    No instance for (Show Shape) arising from a use of ‘print’
    In a stmt of an interactive GHCi command: print it
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

Tho*_*son 10

show函数有类型:

show :: Show a => a -> String
Run Code Online (Sandbox Code Playgroud)

这意味着它只适用于具有Show实例的事物.您可以Show通过手动定义实例或让编译器自动派生实例来使您的类型成为类的实例:

data Shape = Circle Float Float Float | Rectangle Float Float Float Float
  deriving (Show)
Run Code Online (Sandbox Code Playgroud)

要么

instance Show Shape where
    show (Circle a b c) = "Circle " ++ show a ++ " " ++ show b ++ " " ++ show c
    show (Rectangle a b c d) = ...
Run Code Online (Sandbox Code Playgroud)