簡體   English   中英

Haskell>。>符號

[英]Haskell >.> notation

在“函數編程的工藝”一書中,符號'>。>'將函數連接在一起,與'。'的方向相反。 但是當我使用ghci實現它時,它顯示錯誤'>。>'超出范圍。 為什么? 這是一個不再使用的舊記譜法嗎?

>.>默認情況下未定義,但您可以自己定義:

infixl 9  >.>
(>.>) = flip (.)

或等效地,

infixl 9  >.>
f >.> g = g . f

(我在Prelude中給出了基於infixr 9 .的固定聲明。)

它可能只是本書定義的一個函數(我沒有讀過這本書)。 AFAIK, >.>不在任何地方使用。 您可以自己定義:

(>.>) = flip (.)

這事實上的符號似乎是(#)

因為功能是 箭頭 “Control.Category”你也可以使用>>> ,例如

Prelude Control.Category> ((*2) . (+1)) 4
10
Prelude Control.Category> ((*2) <<< (+1)) 4
10
Prelude Control.Category> ((*2) >>> (+1)) 4
9
Prelude Control.Category> ((+1) >>> (*2)) 4
10

(>.>)似乎沒有在標准庫中定義。 但是, Control.Category(>>>) ,其行為相同:

Prelude> :m + Control.Category
Prelude Control.Category> :i (>>>)
(>>>) :: Category cat => cat a b -> cat b c -> cat a c
    -- Defined in Control.Category
infixr 1 >>>
Prelude Control.Category> let f = (* 2) >>> (+ 3)
Prelude Control.Category> f 5
13

請注意,您可以使用Hoogle來解決這些問題。

此外,您當然可以自己定義這樣的操作員:

(>.>) :: (a -> b) -> (b -> c) -> (a -> c)
f >.> g = g . f

然后你可以寫:

Main*> ((* 2) >.> (+ 3)) 5
13

暫無
暫無

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

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