2013-03-10 11 views
21

Ich bin neugierig und konnte in Haskell keinen Vorschlag für so etwas finden. Überlegen Sie, ob sort geschrieben wurde, aber nicht sortBy.Vorschlag für lokale Datendeklarationen/Instanzen

sortBy :: forall a. (a -> a -> Ordering) -> [a] -> [a] 
sortBy f = map getX . sort . map X 
    where 
    newtype X = X { getX :: a } 
    instance Ord X where 
     compare (X a) (X b) = f a b 

Hat jemand diesen Vorschlag gesehen?

+4

Für das, was es wert ist, können Sie dies mit dem funktionalen Paket [reflection] (http://hackage.haskell.org/package/reflection) erreichen; siehe [dieses Beispiel] (https://github.com/ekmett/reflection/blob/master/examples/Monoid.hs). (Volle Enthüllung: Ich habe im Paket zugesagt.) – ehird

+4

So viel wie ich diese Idee liebe (und das gleiche Ding in der Vergangenheit gewollt habe), bin ich nicht sicher, dass das eine echte Frage ist ... –

+2

Ich bin nicht vorschlagend; Ich war mir ziemlich sicher, dass es vorher vorgeschlagen worden wäre, aber ich konnte es nicht finden. Eine akzeptable Antwort wäre eine, die auf eine Diskussion dieses oder eines ähnlichen Vorschlags hinweist, oder eine von jemandem, der in diesen Aspekt der Gemeinschaft involviert ist und sagt: "Ich habe noch keinen gesehen; hier sind einige verwandte Dinge." Ist das eine echte Frage? – luqui

Antwort

1

Offenbar haben die lokalen Instanzen in Haskell Prime Mailingliste diskutiert kurz worden: http://web.archiveorange.com/archive/v/eKcS7T2qBpy7czBE2Jei und ausführlicher in den 6 th Kapitel von Olegs Papier „Functional Pearl: Implicit-Konfigurationen“. Ich habe jedoch praktisch nichts über lokale Datenerklärungen gehört.