2013-03-10 13 views
21

Jestem ciekawy i nie mogłem znaleźć propozycji czegoś takiego w Haskell. Zastanówmy się, czy zostało napisane: sort, ale nie sortBy.Wniosek o lokalne deklaracje/wystąpienia danych

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 

Czy ktoś widział tę propozycję?

+4

Za to, co jest warte, można to osiągnąć za pomocą perlenia/paczki funkcjonalnej [reflection] (http://hackage.haskell.org/package/reflection); zobacz [ten przykład] (https://github.com/ekmett/reflection/blob/master/examples/Monoid.hs). (Pełne ujawnienie: Mam zobowiązania w paczce.) – ehird

+4

Tak bardzo jak uwielbiam ten pomysł (i chciałem tego samego w przeszłości), nie jestem pewien, czy to jest prawdziwe pytanie ... –

+2

Nie jestem proponowanie; Byłem dość pewny, że zostałoby to zaproponowane wcześniej, ale nie mogłem go znaleźć. Odpowiednią odpowiedzią byłby taki, który wskazuje na dyskusję na temat tej lub podobnej propozycji lub jedną z osób zaangażowanych w ten aspekt społeczności, mówiąc: "Nie widziałem żadnego, ale niektóre są podobne". Czy to stanowi prawdziwe pytanie? – luqui

Odpowiedz

1

Najwyraźniej lokalne instancje zostały omówione krótko na liście dyskusyjnej Haskell Prime: http://web.archiveorange.com/archive/v/eKcS7T2qBpy7czBE2Jei, a dokładniej w 6 th rozdziale papieru Olega „Pearl funkcjonalna: niejawne gurations Con fi”. Nie słyszałem jednak praktycznie nic na temat lokalnych deklaracji danych.