簡體   English   中英

Haskell,輸入參數,返回類型

[英]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那么我們就會遇到麻煩,因為我們剛剛承諾我們的實現可以在沒有==運算符的情況下運行。

因此我們使用=>為我們的函數定義添加上下文。 它說的是“ 只要 aEq類型類的實例,這將適用於任何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.

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