首页 > 解决方案 > 将 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 缺乏了解是导致此问题的原因

标签: 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

推荐阅读