在這本書中符號「功能編程的工藝」「>。>」連接功能結合在一起,方向相反的方向「」。但是當我使用ghci實現它時,它顯示錯誤'>。>'超出了範圍。爲什麼?這是一箇舊的記號,不再使用嗎?的Haskell>符號
回答
這可能只是經書定義的函數(我沒讀過書)。 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
>.>
沒有默認定義,但你可以自己定義:(我給基於Prelude的infixr 9 .
固定性聲明)
infixl 9 >.>
(>.>) = flip (.)
或者等價地,
infixl 9 >.>
f >.> g = g . f
:
此外,還可以當然,總自己定義這樣一個操作符:
(>.>) :: (a -> b) -> (b -> c) -> (a -> c) f >.> g = g . f
然後就可以寫'(F>>克)X =克(FX)'或'(>>)FGX = G(FX)' – 2011-12-28 20:40:41
(>.>)
不會出現在標準庫中定義。然而,在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這些事情弄清楚。也直接
Main*> ((* 2) >.> (+ 3)) 5
13
[Hoogle不是尋找>>>使用功能實例化非常有幫助的(http://www.haskell.org/hoogle/?hoogle=%28a+-%3E+b %29 + - %3E +%28b + - %3E + c%29 + - %3E +%28a + - %3E + c%29):( – 2011-12-28 20:42:54
- 1. Uninterned符號符號
- 2. 符號代數表達式的符號
- 3. 符號內的Flash CS4/AS3符號
- 4. 的QVariant符號/無符號比較
- 5. 的Javascript無符號短符號短
- 6. RSpec的 - 模擬符號符號參數
- 7. Common Lisp中的無符號符號
- 8. Jmeter中的變音符號和符號
- 9. Coq中字符的單引號符號?
- 10. 區別:符號和符號:?
- 11. HTML符號以下符號
- 12. 符號 - 無符號轉換
- 13. 編號前的#符號
- 14. 帶問號符號的COUNTIF
- 15. 括號中的運算符符號的括號
- 16. 的符號
- 17. 的符號
- 18. strcmp()和有符號/無符號字符
- 19. gnuplot中的加號/減號符號?
- 20. BigDecimal符號/括號
- 21. 以「#」符號(井號)
- 22. 符號化的字符串
- 23. Android上的音符符號
- 24. $符號
- 25. 符號
- 26. 符號
- 27. (+)符號
- 28. 轉換無符號字符到符號的int
- 29. 我怎麼能做出符號的字符像無符號
- 30. 未定義的符號...運算符new(無符號長整數)
感謝您給我們簡單明確的答案。但是我只是不明白,書中有這樣的記號,它沒有在書中定義它,它使用它就像一個標準的符號。該>>甚至在書的索引,並在所有不同的Haskell運營商的圖形....... – HHC 2011-12-28 12:42:23
@HHC:我不知道。你要問筆者... – kennytm 2011-12-28 13:54:39