Haskell 终端和putStrLn输出差

Haskell 终端和putStrLn输出差,haskell,Haskell,当我在终端中输入下面的代码时,它可以成功地显示我需要的所有细节 avg "Vivo" testDatabase 但当我试图证明它与下面的代码一起工作时,它给了我一个错误——它无法将类型“Float”与“[Char]”匹配。我应该如何尝试修复此错误 --the function for code avg :: String -> [Spa] -> Float avg avgAreaRating spas = fromIntegral (sum lvlrating)

当我在终端中输入下面的代码时,它可以成功地显示我需要的所有细节

avg "Vivo" testDatabase
但当我试图证明它与下面的代码一起工作时,它给了我一个错误——它无法将类型“Float”与“[Char]”匹配。我应该如何尝试修复此错误

--the function for code
avg :: String -> [Spa] -> Float
avg avgAreaRating spas = fromIntegral (sum lvlrating) /  fromIntegral (length lvlrating)
  where area = spaArea avgAreaRating spas
        lvlrating = concatMap getLevelRating area 

--code
show 5  = putStrLn $ avg "Vivo" testDatabase
需要一个字符串作为其参数。发生错误是因为在浮点上调用它-如果类型不匹配,代码将无法编译

当您将avg Vivo testDatabase放入GHCi中时,它工作的原因是GHCi自动且隐式地调用您传递给它的任何内容。与putStrLn不同,print可以将任何类型作为参数,这些类型可以通过Show typeclass转换为字符串,Show typeclass始终包含Float

因此,您只需将putStrLn替换为print:

需要一个字符串作为其参数。发生错误是因为在浮点上调用它-如果类型不匹配,代码将无法编译

当您将avg Vivo testDatabase放入GHCi中时,它工作的原因是GHCi自动且隐式地调用您传递给它的任何内容。与putStrLn不同,print可以将任何类型作为参数,这些类型可以通过Show typeclass转换为字符串,Show typeclass始终包含Float

因此,您只需将putStrLn替换为print:

print $ avg "Vivo" testDatabase