2014-02-06 10 views
29

Ich will nurGibt es eine Standardimplementierung der "trivialen Einschränkung" oder "Objektklasse"?

class Trivial t 
instance Trivial t 

Das ist natürlich nutzlos in Haskell 98, da Sie nur die Einschränkung weglassen; aber mit ConstraintKinds können wir explizit benötigte Argumente der Art * -> Constraint haben. Idealerweise würde ich das gerne als "anonyme Typ-Level-Funktion" definieren, \type a ->(), aber das ist offensichtlich nicht möglich.

Was soll ich tun, etwas vordefiniertes verwenden oder die Klasse lokal genau dort definieren, wo ich sie brauche (da niemand auf sie zugreifen muss, weil die Instanz universell ist, scheint das auch ganz gut zu sein)?

+1

Welches Problem versuchen Sie damit zu lösen? –

+1

@WW .: gerade jetzt, [ 'Typ (->) = ConstrainedCategory (->) Trivial'] (https://github.com/leftaroundabout/constrained-categories/blob/f2f06b52d0e8cf18cd84d4d9bd0c50247109652d/examples/Invertible.hs# L35). Dort wird es im Grunde nur benötigt, um einen konfliktträchtigen MPTC-FunDep der Nicht-Endo-Funktor-Instanz des optional invertierbaren Funktionstyps zu vermeiden, aber ich beabsichtige, ihn allgemeiner zu nutzen. – leftaroundabout

+0

Ich glaube, dass '() :: Constraint' ist die triviale Einschränkung. –

Antwort

2

Da dies scheint ziemlich populär zu sein, habe ich endlich eine solche trivial-Constraint-Klasse to a Hackage package geschoben.

import Data.Constraint.Trivial 

id' :: Unconstrained t => t -> t 
id' = id 
Verwandte Themen