haskell - 将 Float 与实际类型 `p0 -> a0' 匹配
问题描述
当所有类型都是双打时我有这个工作但是我需要它们采用这种格式,知道如何解决我的错误吗?
areaCalcuator:: Int -> Float
priceCalcuator :: Int -> Int -> Float
--isMoreExpensive :: Bool
areaCalcuator x = ((fromIntegral x / 2) ^2)* pi
priceCalcuator x y = let area = (\z -> (((fromIntegral x / 2) ^2)* pi))
in (0.001 * area) + ((fromIntegral y)*0.002 * area) * 1.5
我得到的新错误是
* Couldn't match expected type `Float' with actual type `p0 -> a0'
* Probable cause: `(+)' is applied to too few arguments
In the expression:
(0.001 * area) + ((fromIntegral y) * 0.002 * area) * 1.5
In the expression:
let area = (\ z -> (((fromIntegral x / 2) ^ 2) * pi))
in (0.001 * area) + ((fromIntegral y) * 0.002 * area) * 1.5
In an equation for `priceCalcuator':
priceCalcuator x y
= let area = (\ z -> ...)
in (0.001 * area) + ((fromIntegral y) * 0.002 * area) * 1.5
* Relevant bindings include
area :: forall p. p -> a0
(bound at C:\\Users\Ellis\OneDrive\Year 2\CS-205 Declarative Programming\CW1\Haskell-Cw1\Coursework1.hs:13:26)
|
14 | in (0.001 * area) + ((fromIntegral y)*0.002 * area) * 1.5
|
我相信我对 haskell 缺乏了解是导致此问题的原因
解决方案
或者,您也可以这样做:
areaCalculator :: Floating a => a -> a
areaCalculator x = ((x / 2) ^2) * pi
priceCalculator :: Double -> Double -> Double
priceCalculator x y =
( (areaCalculator x * 0.001)
+ (areaCalculator x * 0.002 * y)) * 1.5
推荐阅读
- java - 用于时间可计算值的实体瞬态字段或专用 DTO - 最佳代码实践
- weblogic - Weblogic 14 与 Adopt Open Jdk 11 的兼容性
- playwright - 循环遍历元素时剧作家脚本超时
- python - 从具有 SQLAlchemy 名称的复选框获取表单
- javascript - 尽管其他几乎相同的路径正常工作,但无法找到模块导入路径
- ldap - 使 Keycloak(使用 LDAP)强制密码过期
- r - 如何在 R 中绘制一个“真实”的圆圈(意味着所有方向的比例都相同)?
- azure-monitor - 如何将 url 中的工作簿参数传递给 Azure Monitor 工作簿?
- elasticsearch - 在重新索引期间,使用无痛添加关键字字段?
- rest - 在 REST Web 服务中创建新的默认记录的惯用方法是什么?