基本上,我需要為函陣列合定義中綴運算子,翻轉g . f方式。
(#) :: (a -> b) -> (b -> c) -> a -> c
(#) = flip (.)
infixl 9 #
在這里,我暫時只選擇了符號:#,但我不確定這個選擇在與其他定義的沖突方面沒有問題。
奇怪的是我在 Haskell 中找不到預定義的中綴運算子串列。
我希望組合運算子盡可能簡潔,希望是單個字符,例如.,如果可能的話,我想制作它&。可以嗎?
是否有任何指導或最佳實踐教程?請指教。
相關問答:
Haskell 運算子允許使用哪些字符?
uj5u.com熱心網友回復:
您看不到 Haskell 內置運算子串列的原因與您看不到所有內置函式的串列的原因相同。他們無處不在。有些是 in Prelude,有些是 in Control.Monad,等等等等。運算子在 Haskell 中并不特殊;它們是語法簡潔的普通函式。總的來說,Haskellers 通常對操作員很滿意。花任何時間在您最喜歡的鏡頭庫中,您會發現許多看起來很有趣的操作員。
就 而言(#),最好避免。我不知道有什么內置的運算子叫做這個,但是在決議時可能#有點特別。具體來說,編譯器擴展#在普通識別符號的末尾啟用,GHC 遵循這種做法定義了許多內置(原始)型別。例如,Int是通常的(裝箱)整數型別,而Int#是原始整數。大多數人不需要直接與它互動,但它是#Haskell 中的一個用途,添加運算子會稍微混淆。
您的(#)運算子在 Haskell 中呼叫(>>>),它適用于所有Category實體,包括函式。它的伙伴是(<<<),(.)對所有Category實體的泛化。如果三個字符對您來說太長,我已經看到它(|>)在其他一些語言中被呼叫,但是 Haskell 已經將該運算子用于其他東西。如果您不使用Data.Sequence,則可以使用該運算子。但就個人而言,我會選擇(>>>). 任何 Haskeller 都會很快認出它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427262.html
標籤:哈斯克尔
