對不起,我無法想象任何更好的問題標題,所以請先閱讀。試想一下,我們有一個封閉式的家庭映射每一種類型,以它的相應Maybe
除了maybes自己:封閉式家庭和奇怪的功能類型
doMagic :: a -> Family a
doMagic = undefined
exampleA = doMagic $ Just()
exampleB = doMagic $()
在GHCI擺弄它:
type family Family x where
Family (Maybe x) = Maybe x
Family x = Maybe x
我們可以使用這種類型的家庭甚至聲明函數顯示可以評估此功能應用程序的類型:
*Strange> :t exampleA
exampleA :: Maybe()
*Strange> :t exampleB
exampleB :: Maybe()
問題是,是否可以提供任何實現doMagic
功能除了undefined
?舉個例子說,我想將每個值都包含在Just
的構造函數中,但Maybes應該保持不變,我該怎麼做?我試過使用類型類,但是如果不使用封閉類型的家族,沒有寫出doMagic函數的可編譯簽名,有人可以幫我嗎?
在一個動態類型語言'doMagic x = Just undefined'也將尊重類型。從理論上講,類型系統可以允許這樣做(但是這會非常有用嗎?)。順便說一句,你描述的例子,如果你根據哪個具體類型'a'做了不同的事情,在運行時需要類型信息,而Haskell被設計爲允許類型擦除(在運行時沒有類型信息)。不過,您可以使用類型類來獲得更近的東西。 – chi 2014-10-29 23:36:03
此外,這個問題看起來與「封閉類型家族存在的類型的_free定理是什麼?」有關。 – chi 2014-10-29 23:41:12