[英]Haskell - Couldn't match type
我正在嘗試在 Haskell 中編寫一個 function,它將一個字符串和一個帶有模式 [(String, Float)] 的列表和 output 分配給與我的輸入匹配的鍵字符串的浮點數作為輸入,但我不明白這是什么我做錯了。 這是我的代碼:
a = [("x",1.21),("y",3.52),("z",6.72)]
val :: String -> [(String, Float)] -> Float
val x [(s,f)]
| x == s = f
它給了我錯誤
* Couldn't match type `Double' with `Float'
Expected type: [(String, Float)]
Actual type: [([Char], Double)]
* In the second argument of `val', namely `a'
In the expression: val "x" a
In an equation for `it': it = val "x" a
誰能解釋我做錯了什么以及這種類型不匹配有何意義?
在val
的定義中有一些問題,而不是在類型簽名中:
[(s,f)]
部分不是列表的模式:您會經常使用變量名或模式。考慮這個解決方案拋出一個錯誤:``
val :: String -> [(String, Float)] -> Float
val x [] = error ("Not Found: " ++ show x)
val x ((s,f):rest) | s==x = f
| otherwise = val x rest
如果您使用 Maybes,您也可以返回Just f
和Nothing
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.