簡體   English   中英

Haskell - 無法匹配類型

[英]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的定義中有一些問題,而不是在類型簽名中:

  1. 保護選項並不詳盡:當 x 不等於 s 時會發生什么?
  2. [(s,f)]部分不是列表的模式:您會經常使用變量名或模式。
  3. 如果在遍歷整個列表后沒有找到匹配項會怎樣? 你會拋出一個錯誤,或者一個 Maybe,或者返回一個合理的默認值嗎?

考慮這個解決方案拋出一個錯誤:``

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 fNothing

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM