簡體   English   中英

這個haskell雙函數組合的類型是什么?

[英]What is the type of this haskell double function composition?

t2 = (\\xy z-> xyx)

GHCI 向我展示了這個:

t2 :: (b1 -> b2) -> (b2 -> b1) -> p -> b1 -> b2

我不太明白這種類型簽名是如何產生的。 到目前為止,我認為最右邊的 x 基本上是一個函數,它接受一個b2並返回一個b1 ,那么b1是中間函數y的輸入,並再次輸出b2 它不應該返回一個新類型b3或什么的值嗎?

首先讓我們以一種明確哪個參數對應於類型簽名的哪個部分的方式重寫它:

t2 :: (b1->b2) -> (b2->b1) -> p -> b1 -> b2
t2    x           y           z  = x . y . x

z :: p根本沒有使用,所以我們可以很容易地通過考慮來消除它

t3 :: (b1->b2) -> (b2->b1) -> b1 -> b2
t3    x           y         = x . y . x

為什么是那種類型? 那么,該組合物鏈饋送的結果xy ,和的結果yx 換句話說, y讓你從結果類型的x回到參數類型的x 因此y的類型必須是x的“倒置”類型。 所以

t3 :: (m->n) -> (n->m) -> ?
t3    x         y       = x . y . x

組合的類型由“外端”決定,即參數必須是x的參數類型,結果必須是...的結果類型,再次, x 因此

t3 :: (m->n) -> (n->m) -> m->n
t3    x         y       = x.y.x

這就是 GHCi 告訴你的,帶有重命名的類型變量。

暫無
暫無

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

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