Podczas pracy z pochodnymi instancjami w Haskell, czy możliwe jest wyprowadzanie funkcji dla dowolnych typów lub czy ograniczamy się do konkretnych funkcji?Wykonywanie dowolnych funkcji w Haskell
Odpowiedz
Można wyprowadzać instancje następujących klas w haskell 98: Eq, Ord, Enum, Ix, Bounded, Read i Show.
Korzystając z rozszerzeń ghc, można także wyprowadzać wystąpienia następujących klas: Możliwe do wpisania, Dane, Funktor, Składane i Traversalable. Istnieje również rozszerzenie ghc, które umożliwia nowemu typowi wyprowadzanie instancji z jego typu implementacji.
Nie można wyprowadzać wystąpień dowolnych klas z tego prostego powodu, że haskell nie wiedziałby, jak wygenerować niezbędne funkcje bez specjalnej wiedzy na temat danej klasy.
Ale GHC poradzi sobie w niektórych prostych przypadkach. Jeśli powiesz 'newtype Bar = Bar Foo' i Foo ma instancję Quux, wtedy GeneralizedNewtypeDeriving może wyprowadzić dla ciebie instancję Quux dla paska. Oczywiście jest to po prostu trywialne rozpakowanie, ale jest lepsze niż nic. – jrockway
Ograniczasz się do poszczególnych klas, jeśli chodzi o to, co kompilator wie, jak uzyskać dla Ciebie. Używając preprocesora lub szablonu Haskella, możesz sam zakodować nowe mechanizmy wywodzące, jeśli znasz ogólne podejście do tworzenia implementacji funkcji dla poszczególnych typów.
Pozostałe dwie odpowiedzi są poprawne. Ale jeśli potrzebujesz więcej, istnieją pakiety na hackage, które mogą obsłużyć więcej. Bardzo lubię Data.Derive, ponieważ możesz bezpośrednio wygenerować kod źródłowy (dla kompatybilności) lub podłączyć go do Template Haskell, aby zrobić to podczas kompilacji. Szeroka gama klas jest już obsługiwana i bardzo łatwo jest dodać własne wsparcie. Podsumowanie: Boisko reklamowa cholernie dobrym biblioteki :-)
Teraz biorę to z powrotem. W tamtym czasie nie próbowałem dodać wsparcia, ale założyłem, że to łatwe. Nie jest; polega to na rekompilacji biblioteki z tego, co potrafię powiedzieć. Ale nadal wbudowana obsługa jest dobra i kompletna. – luqui
Aby dodać odpowiedź Dona: wyprowadzenie funkcji niestandardowych dla typów danych nazywa generic programming i jest lot of literature na ten temat. Preprocesory i szablon Haskell nie są jedynymi rozwiązaniami; zobacz jeden z artykułów przeglądowych, które zawierają listę literatury dla innych opcji.
- 1. Wykonywanie polecenia w Haskell
- 2. Równość funkcji w Haskell
- 3. Serializacja funkcji w Haskell
- 4. Definicja funkcji w Haskell
- 5. wykonywanie funkcji w sql plus
- 6. Wykonywanie funkcji równolegle
- 7. Wykonywanie funkcji okresowo po zakończeniu wykonywania funkcji
- 8. Pisanie funkcji czasu w Haskell
- 9. Wyświetlanie typów funkcji w Haskell
- 10. Haskell Print Lines w funkcji
- 11. Przeciążanie funkcji narzędzi w Haskell
- 12. Wykonywanie funkcji po czasie x
- 13. Wykonywanie funkcji po powiększeniu highcharts
- 14. Maszynopis - samoczynne wykonywanie funkcji anonimowych
- 15. Haskell - Programowanie funkcji Pomoc
- 16. Wykonywanie funkcji w par wierszy pandy dataframe
- 17. Clojure jest odpowiednikiem "dowolnych" i "wszystkich" funkcji Pythona?
- 18. mapa. skład funkcji foldra - Haskell
- 19. Haskell eksportuje dużą liczbę funkcji
- 20. Szablony funkcji dla dowolnych kontenerów STL zawierających typy arbitralne
- 21. Importowanie funkcji za pomocą aliasu w Haskell
- 22. Próba znalezienia funkcji "losowej" w Haskell
- 23. Alias dla argumentów funkcji w Haskell
- 24. Podjęcie funkcji przez sieć w Haskell
- 25. Znajdź źródło funkcji w Haskell (workflow)
- 26. Jak powtórzyć listę funkcji w haskell
- 27. Typy przekazywania jako argumenty funkcji w Haskell?
- 28. Identyfikacja bieżącego HEC dla funkcji w Haskell
- 29. Wykonywanie funkcji jQuery przy użyciu pakietu RSelenium
- 30. Wykonywanie funkcji po wyświetleniu widoku - Swift
Hehe, +1 jeśli znalazłeś to, ponieważ miałeś nadzieję, że możesz wypróbować 'Test.QuickCheck.Arbitrary' dla ADT. :) –