2013-08-28 40 views
2

是否有任何方式定義不使用類型族的類型級別投影?Haskell類型級別投影

我這樣做,像這樣:

{-# LANGUAGE TypeFamilies #-} 
type family Project t :: * 
type instance Project [r] = r , 

,但我真的只是曾經使用它的一個實例。

回答

1

你可以使用MultiParamTypeClassFunctionalDependencies,雖然不知道你爲什麼使用它,但很難說這是否足夠。

class Project k a | k -> a 
instance Project [r] r 

> :t undefined :: Project String r => r 
undefined :: Project String r => r :: Char 
+0

是的,當然(facepalms)。謝謝! – Obscaenvs

1

我不確定你準備在哪裏使用它。但我傾向於使用類型級別投影來滿足haskell類型系統。我最常做的是這樣定義一個函數:

project :: [a] -> a 
project = undefined 

現在使用[a]類型的對象上項目會給我a類型的對象。

我使用的另一個功能(雖然有時)與上述一起是asTypeOf

+0

我打算用它來獲得樂趣和利潤。你的回答是一個漂亮的技巧,但我不使用這些技巧。不過謝謝。 – Obscaenvs

+0

不客氣。 – Satvik