簡體   English   中英

haskell中的foldr地圖是什么類型的?

[英]What is the type of foldr map in haskell?

我試圖找出折疊地圖的類型,以及你應該如何解決這樣的問題。

我知道個別類型是什么:

foldr :: (a -> b -> b) -> b -> [a] -> b
map :: (a -> b) -> [a] -> [b]

我知道各個函數是如何工作的,但找出類型是我似乎無法解決的問題。

foldr會將一個函數作為第一個參數,這將是整個映射的權利嗎?

我歡迎所有提示,我是Haskell的新手,並試圖學習這些謎題。

作為成分,我們有foldrmap 為避免混淆,讓我們將mapab重命名為cd ,因為這些(可能)是不同的類型。 所以我們把功能看作:

foldr :: (a -> b -> b) -> b -> [a] -> b
map   :: (c -> d) -> [c] -> [d]

或者更詳細:

foldr :: (a -> (b -> b)) -> (b -> ([a] -> b))
map   :: (c -> d) -> ([c] -> [d])

由於map是具有foldr作為函數的函數應用程序的參數,這意味着map的類型應該與foldr參數類型相同,因此:

  a        -> (b   -> b)
~ (c -> d) -> ([c] -> [d])
----------------------------------
a ~ (c -> d), b ~ [c] ~ [d], c ~ d

因此我們推導出ac -> d類型相同,並且b[c][d]類型相同。 因此我們也知道c ~ dcd類型相同)。

foldr map的類型是foldr函數的返回類型,但是專門用於我們派生的相等關系,因此:

foldr map :: b -> ([a] -> b)

所以我們用c -> c替換a ,用[c]替換b ,因此類型:

foldr map :: [c] -> ([c -> c] -> [c])

或者是一種不那么冗長的形式:

foldr map :: [c] -> [c -> c] -> [c]

注意foldr的簽名已經推廣到foldr :: Foldable f => (a -> b -> b) -> b -> fa -> b ,但派生類型是類似的。

暫無
暫無

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

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