簡體   English   中英

了解Haskell(->)?

[英]Understanding Haskell's (->)?

在學習“高級” Haskell時,我很少看到(->) 當我嘗試運行:t (->)ghci失敗,以為有時甚至官方文檔也使用此符號。

據我可以猜測(->)是在一個Hask 任何態射-基本上,任何Haskell的功能。 我假設這個想法是要修復源端點或目標端點:例如, ((->) Int)可能意味着Int類型的任何函數; 顯然, (Int (->))表示Int任何函數。

下一個假設是(->)可能是endofunctor。 fmap實現看似微不足道:具有類型為a且定態為f :: a -> b fmap f :: a -> b的固定終結點可以生成((->) b)的實例。 它保留id ,但不會撕裂現有的合成:即fmap(g . f) = fmap(g) . fmap(f) fmap(g . f) = fmap(g) . fmap(f)

所以我的第一個問題是:我說的對嗎?

我的第二個問題是為什么:t (->)ghci失敗?

我的主要問題是,有沒有一種方法可以在真實的Haskell代碼中使用(->) 我是否需要啟用一些{{ #Pragma ...擴展名? 還是僅是用於解釋概念的理論概念?

最后, 最后一個問題 是否存在對偶概念(<-)

->是函數類型的類型構造函數。 f :: A -> B表示“ f是從某種類型A到某種類型B的函數”。

:t (->)是錯誤,因為->不是值,並且沒有類型; 它是一個類型(或更確切地說是類型構造函數)。 同樣, :t Maybe:t Int是錯誤。

與普通運算符一樣,中綴應用程序是(咖喱)前綴應用程序的語法糖; 即就像x + y可以寫成(+) xy((+) x) yA -> B可以寫成(->) AB((->) A) B

((->) Int)並不意味着“ Int類型的任何函數”; 它是功能類型構造Int 它本身不是有效的類型,但是您可以將其應用於類型以獲得有效的函數類型。 例如((->) Int) String是從IntString的函數類型。

(Int (->))是一種錯誤; 它嘗試將Int應用於(->) ,但Int不接受任何參數。

(->) e實際上是任何類型eFunctor (具有fmap = (.) ,即函數組合)。 它也是一個ApplicativeMonad (相當於Reader )。

所有這些都是標准的Haskell語法。 不需要語言擴展。

<-在類型級別不存在。 這是保留的語法,可以在表達式中使用,例如在列表推導( [ x * 2 | x <- [0 ..] ] )或do塊中( do { x <- p; return (x * 2) } ) ; 它還在其他一些上下文中使用,但不在類型中使用。

暫無
暫無

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

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