У меня есть следующий простой код:Представление данных в виде строки
data Shape = Circle Float Float Float | Rectangle Float Float Float Float deriving (Show)
surface :: Shape -> Float
surface (Circle _ _ r) = pi * r^2
main = putStrLn $ surface $ Circle 10 20 30
Он жалуется:
Couldn't match expected type `String' with actual type `Float'
In the second argument of `($)', namely `surface $ Circle 10 20 30'
Как избавиться от ошибки? Я также хотел бы добавить «show
» к Shape
и переопределить его так, чтобы я мог отображать Shape
на экране (распечатано), что бы я ни захотел.
BTW вы должны лучше использовать синтаксис записи здесь, например, 'Circle {circleX, circleY, circleRadius :: Float}'. – Landei