2
Haskell是否可以將函數的箭頭類型構造函數( - >)僅應用於其右側類型(例如:( - > a))以獲取類型* - > *的類型構造函數?Haskell將函數箭頭應用於僅結果類型?
Haskell是否可以將函數的箭頭類型構造函數( - >)僅應用於其右側類型(例如:( - > a))以獲取類型* - > *的類型構造函數?Haskell將函數箭頭應用於僅結果類型?
不,目前不可能。 Haskell的類型系統有一定的侷限性,可以在大多數情況下對Haskell類型系統有用且方便,這就是其中一個限制。你最好的選擇是使用新類型。
newtype FuncFlip r a = FuncFlip { unFuncFlip :: a -> r }
Newtypes只是標籤,以幫助編譯器知道如何正確地進行類型檢查和執行型導向訊(類型類)。大概你想翻轉類型參數來提供一些類型實例。這意味着只要你想使用該類型類的函數,就必須用FuncFlip
來修飾任何特定的輸入,並用unFuncFlip
對任何特定的輸出進行去除。這比所希望的稍微冗長一些,但實際上並不是那麼糟糕,因爲它迫使你明確地確定你想要使用哪個類型類的實例。
您可以爲此創建一個Newtype的實例,這可能會或可能不會對您很方便。
instance Newtype (FuncFlip r a) (a -> r) where
pack = FuncFlip
unpack = unFuncFlip
使用'newtype' – is7s
是的,我寧願避免這種情況,因爲這將讓事情變得更復雜。我幾乎肯定我已經看到它完成了。 – Edward
原來,是的,我確實需要一種新類型。如果您將該帖子作爲答案發布,我會接受它,以便您可以獲得讚譽。 – Edward