[英]What are uses of polymorphic kinds?
多態類型是Haskell類型系統的擴展,由UHC 支持 ,允許
data A x y = A (y x)
鍵入(kinded?)為a -> (a -> *) -> *
(a- a -> (a -> *) -> *
。 它們有什么用?
一個可能的用法示例是使用圓錐形的TypeCompose組成無點樣式的monad變壓器。
type MyT = StateT Foo :. MaybeT :. ContT Bar
(僅作為示例,我不知道這些foo和bar會做什么。。)
代替:
type MyT m = StateT Foo (MaybeT (ContT Bar m))
(這將具有相同的結果除了newtype
-wrappers)
當前,您需要復制不同種類的組合器代碼,並且此擴展取消了重復,並允許使用一段代碼來全部統治它們。
這個問題的背景通常是建立一種更具表現力的種類系統的動機 。
也就是說,向Haskell添加多態類型的總體原因是為了改善類型級別編程的體驗。 當前,Haskell中的類型級別編程以基本上沒有類型的“ 種類 ”級別進行。 通常,更豐富的一種語言將使在Haskell中進行類型級別的編程更加容易。
一個更具體的示例是從SYB樣式的泛型( 引用 )中刪除(動態)可類型化約束,並改善對更高種類的泛型編程的總體支持。
當然,它們對於定義可以任意任意操作數據構造函數的函數很有用!
一個具體的示例可能是一個函數,該函數給定具有任意Arity的數據構造函數,然后返回一個將給定構造函數包裝在Some()中的新數據構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.