2015-01-20 7 views
5

Na przykład, deklaracja z deriving:zawierająca klauzulę z dowolnymi "aliasami przymusowymi"?

{-# LANGUAGE DeriveDataTypeable, ConstraintKinds #-} 
import Data.Data (Data) 
import Data.Typeable (Typeable) 

type Constraints a = (Show a, Eq a, Ord a, Data a, Typeable a) 
data A = A deriving (Constraints) 

błędy z:

Illegal deriving item ‘Constraints’ 

co ma sens biorąc pod uwagę http://downloads.haskell.org/~ghc/7.8.3/docs/html/users_guide/deriving.html

piszę deriving (Show, Eq, Ord, Data, Typeable) dla większości moich typów. Byłoby miło wyeksportować standardowe "aliasy wiązań", tj. Każdy rodzaj rodzaju * -> Constraint. Biorąc pod uwagę, oczywiście, że ograniczenia w krotce ograniczeń są poprawne, mają pustą "minimalną pełną definicję", itp.

Czy jest jakaś propozycja w tym zakresie? Jak trudne by to było? Czy istnieją alternatywy?

+2

Jeśli chodzi o propozycję, jeśli nawet istnieje, w co wątpię, to prawdopodobnie jest bardzo niska na liście rzeczy do zrobienia, zwłaszcza, że ​​zestaw klas, które można wyprowadzić normalnie, nie jest tak duży. Jeśli naprawdę chcesz uniknąć zapisywania każdej klasy za każdym razem, możesz użyć szablonu Haskell do wygenerowania niezależnych deklaracji pochodnych. – user2407038

+0

Tak, zastanawiałem się nad tym, ale potem masz problemy z szablonem Haskella dłuższej kompilacji, itp. –

Odpowiedz

1

Brak propozycji. Nie byłoby to zbyt trudne, ale podejrzewam, że nie uzyskałby dużej przyczepności. Nie tylko możesz użyć szablonu haskell do generowania samodzielnych deklaracji wyprowadzających, jak sugeruje komentarz, ale możesz naprawdę powiększyć do żądanej klauzuli za pomocą CPP, jeśli naprawdę chcesz.

Powiązane problemy