【发布时间】:2021-03-15 06:34:57
【问题描述】:
加载以下模块时出现错误:
(Eq Planet)没有因使用“==”而产生的实例 • 在表达式中:planet == Mercury 在模式保护的一个 stmt 中 “ageOn”的方程:
如何检查行星是否等于某个行星?
module SpaceAge (Planet(..), ageOn) where
data Planet = Mercury
| Venus
| Earth
| Mars
| Jupiter
| Saturn
| Uranus
| Neptune
mercury :: Float
mercury = 0.2408467
venus :: Float
venus = 0.61519726
earth :: Float
earth = 1.0
mars :: Float
mars = 1.8808158
jupiter :: Float
jupiter = 11.862615
saturn :: Float
saturn = 29.447498
uranus :: Float
uranus = 84.016846
neptune :: Float
neptune = 164.79132
ageOn :: Planet -> Float -> Float
ageOn planet seconds
| planet == Mercury = seconds * mercury
| planet == Venus = seconds * venus
| planet == Earth = seconds * earth
| planet == Mars = seconds * mars
| planet == Jupiter = seconds * jupiter
| planet == Saturn = seconds * saturn
| planet == Uranus = seconds * uranus
| planet == Neptune = seconds * neptune
【问题讨论】:
-
使用模式匹配。或者您可以随时将
deriving Eq添加到数据类型定义中
标签: haskell functional-programming