Jakie są zalety strzałek w stosunku do zwykłych funkcji w haskell. Co mogą zrobić, funkcje nie mogą. Funkcje mogą odwzorowywać struktury za pomocą fmap.Zaleta strzałek nad funkcjami
Odpowiedz
Aby uzyskać szerszy obraz, strzałki usuwają Cię z Hask i do innych kategorii, które chcesz zbadać. Kategoria Kleisli jest prawdopodobnie najlepiej znana Haskellerom, a następnie Cokleisli. Są to naturalne „rozszerzenia” z HASK: dodać endofunctor wokół obu wyniku lub argumentów, a następnie dostać kategorię ponownie jeśli
Kleisli
: funktor jest monada, więcid ≅ return :: a -> m a
(.) ≅ (<=<) :: (b->m c) -> (a->m b) -> a->m c
CoKleisli
: funktor jest comonad, więcid ≅ coreturn :: m a -> a
i(.) :: (m b->c) -> (m a->b) -> m a->c
(Dla tego nie potrzebujesz jeszcze Arrow
, tylko Category
. Ale ogólne kategorie nie są bardzo ciekawe, zazwyczaj chcą monoidal lub nawet kartezjański zamknięte kategorię, która jest co Arrow
jest grubsza zmierzające).
Ale istnieje pewien wiele other categories.Większość nie ma wiele wspólnego z Hask i nie może być wyrażona standardową klasą Arrow
, głównie dlatego, że obiekty mają specjalne właściwości, które nie spełniają wszystkie typy Haskell. W rzeczywistości, jeśli dodasz możliwość ograniczania typów obiektów, the possibilities immediately become much wider. Ale nawet jeśli pozostaniesz przy standardowych klasach, może nawet po prostu w ->
, pozbawiony punktu styl kompozycji, który jest naturalny ze strzałami, często wychodzi bardzo ładnie, zwięźle i otwiera nowe sposoby myślenia o transformacjach.
Funkcje są tylko instancją strzałek, jest to jak pytanie "Dlaczego używać monad zamiast tylko Maybe
".
Wszystko, co można zrobić za pomocą strzałek, można oczywiście wykonać za pomocą funkcji, ponieważ instancja Arrow (->)
może mówić tylko o jednej małej części funkcji, a mianowicie o klasie typu Arrow
. Jednak strzałki mają więcej instancji niż zwykłych funkcji, więc możemy używać funkcji ssame do operowania na bardziej złożonych typach.
Strzały są ładne, ponieważ mogą mieć o wiele więcej konstrukcji niż tylko funkcję, podczas przechodzenia z zaledwie fmap
, nie mamy sposobu na zbieranie efektów, są bardziej wyraziste niż monady! Rozważmy strzałkę Kleisli,
newtype Kleisli m a b = Kleisli {runKleisli :: a -> m b}
To tworzy strzałkę, gdy m
jest monadą. Tak więc każdy Monad
tworzy strzałkę, a tym samym możemy budować monadyczne obliczenia, płynnie komponując a -> m b
i zrobić wiele przydatnych rzeczy, takich jak to. Niektóre biblioteki XML używają strzałek do abstrakcji nad funkcjami od elementu do jego podelementów i używają go do przechodzenia przez dokument. Inne parsery używają strzałek (ich pierwotny cel), choć obecnie wydaje się, że to nie jest korzystne dla Applicative
.
Zauważyliśmy, że strzałki są bardziej ogólne, gdy mówimy tylko o strzałkach, unikamy duplikowania całego kodu, który powinniśmy napisać, aby zrobić coś z naszymi parserami, skrobakami xml i monadycznymi Funkcje!
To tak samo, jak na Monad
przez Maybe
, tracimy trochę mocy, ponieważ nie jesteśmy już w stanie wydawać konkretnych oświadczeń, ale w zamian otrzymujemy bardziej ogólny kod.
- 1. Zaleta drzew B + nad BST?
- 2. Jaka jest zaleta multimapy nad mapą wektorów?
- 3. Jaka jest zaleta UnityContainer.Resolve nad Activator.CreateInstance?
- 4. Zaleta ListFragment nad listView lub normalnego fragmentu
- 5. Zaleta dostawcy typu FsXaml nad XamlReaderem
- 6. Jak mogę iteracyjne nad funkcjami Array.prototype
- 7. Jaka jest zaleta Monitor.Enter (obiekt, ref bool) nad Monitor.Enter (obiekt)?
- 8. Jaka jest zaleta korzystania z przestrzeni nad widokiem
- 9. Zaleta 64-bitowego MSBuild?
- 10. Zaleta korzystania z Object.create
- 11. Zaleta wydajności MySQL Enum?
- 12. Zrozumienie `~` z 2 funkcjami
- 13. Zaleta/Wada MemoryStream.Position lub MemoryStream.Seek
- 14. Jaka jest zaleta "wyrażeń lambda"?
- 15. Jaka jest zaleta git lfs?
- 16. Dodawanie strzałek scrollBar
- 17. Składnia funkcji łańcuchów strzałek
- 18. C# i klawisze strzałek
- 19. Klawisze strzałek z NSTableView
- 20. Wykreślanie strzałek z gnuplotem
- 21. Sterowanie liczbą głowic strzałek
- 22. Keycodes klawiszy strzałek
- 23. kody pobierania i strzałek
- 24. * Subtelne * Różnice między funkcjami VB a funkcjami Convert.To *?
- 25. Chcę poznać różnicę między niskopoziomowymi funkcjami a funkcjami najwyższego poziomu
- 26. IPython z funkcjami bpython
- 27. NoSQL z funkcjami analitycznymi
- 28. Nieznajoma SSE z funkcjami
- 29. vim: jak określić klawisze strzałek
- 30. Wygląd strzałek w ggplot2 geom_segment()