[英]Haskell, input arguments, return type
對於這段haskell代碼:
isIn :: (Eq a) => [a] -> [a] -> Bool
needle `isIn` haystack = any (needle `isPrefixOf`) (tails haystack)
這是我相信的功能定義。 我如何理解輸入參數是什么以及返回類型是什么?
例如:什么是(Eq a)
?
Eq
是所謂的類型類 。 它聲明了一些函數,在這種情況下是==
和朋友,我們可以創建該類型類的實例,它們為==
和其他提供定義。
這意味着當我們有一個Eq
類型類的實例時,我們知道我們可以在它上面使用==
。
這里的訣竅是,在我們的函數中,我們需要有類型可以檢查它們是否相等。 如果我們只是[a] -> [a] -> Bool
那么我們就會遇到麻煩,因為我們剛剛承諾我們的實現可以在沒有==
運算符的情況下運行。
因此我們使用=>
為我們的函數定義添加上下文。 它說的是“ 只要 a
是Eq
類型類的實例,這將適用於任何a
”。 這樣,我們可以安全地使用==
並知道我們所有的參數類型都會適當地實現它。
快速插圖
這是一個錯誤:
doIfEqual :: a -> a -> (a -> a -> [a])
doIfEqual a b f = if a==b then f a b else []
但這很有效,因為我們指定a
是一個Eq
的實例
doIfEqual (Eq a) => a -> a -> (a -> a -> [a])
doIfEqual a b f = if a==b then f a b else []
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.