Czy można zapytać ghci o typ wywnioskowany dla funkcji w innej funkcji?Czy GHCi może mi podać typ lokalnej funkcji Haskella?
Odpowiedz
Możesz spróbować zrobić to przez ustawienie na nim punktu przerwania, więc funkcja znajduje się w zakresie od debuggera.
Sądzę również, że EclipseFP może powiedzieć Ci, co się dzieje, gdy myszkujesz nad nimi, przynajmniej przez pewien czas.
Jest to szybki i brzydki hack, ale to, co zwykle zrobić, to po prostu użyć funkcji w niewłaściwy sposób i przeczytać komunikat o błędzie: wyjście
inc x = x + 1
where
f (y, z) = y + z
g = f :: Char
GHCi:
Couldn't match expected type `Char'
against inferred type `(t, t) -> t'
In the expression: f :: Char
Chociaż to opuszcza kontekst Num t =>
, zwykle dostarcza mi wystarczających informacji, aby kontynuować.
+1 Doskonały! To naprawdę pomogło mi zrozumieć definicję funkcji owłosionej! Uwaga: działa to *** *** dowolne wyrażenie w definicji funkcji. Na przykład, jeśli chcesz zobaczyć typ 'blah' w' f x = foo + blah', wykonaj - 'f x = foo + (niech exp = bla w exp :: Char)'. –
Z GHC 7.8+, wystarczy dołączyć `asTypeOf` _
do wyrażenia.
Aby uzyskać szczegółowe wyjaśnienie, patrz: Find out the type of an expression/function with typed holes.
- 1. Znajdź wnioskowany typ dla funkcji lokalnej
- 2. czy ktoś może podać mi przykład Two_line_list_item w systemie Android?
- 3. Typ funkcji drukowania na konsolę bez ghci
- 4. Dlaczego ghci daje mi typ "1 ++ 2" zamiast wściekłości?
- 5. Kompozycja funkcji Haskella
- 6. Czy istnieje taki "uniwersalny" typ Haskella?
- 7. Funkcja funkcji Haskella
- 8. Co to jest konwersja przechwytywania w Javie i czy ktoś może podać mi przykłady?
- 9. Typ klasy Haskella dla kolejki
- 10. Czy ktoś może mi wytłumaczyć ten kod?
- 11. Czy ktoś może mi wyjaśnić MVC?
- 12. Czy ktoś może mi wyjaśnić metody anonimowe?
- 13. Typ polecenia ciąg zawierający wyrażenie Haskella
- 14. Jak podać typ domyślny dla generycznych?
- 15. Zrozumienie Operatora obsady Haskella
- 16. "Inne" Haskella to synonim "_"?
- 17. Sprawdzanie Typ funkcji w Scala
- 18. Czy Emacs może pokazać mi, gdzie wywoływana jest określona funkcja?
- 19. GHCi nie może znaleźć modułów mojego programu
- 20. Czy ktoś może podać przykład na React-Redux Jest testowanie?
- 21. Czy ktoś może mi wyjaśnić funkcję pack() w PHP?
- 22. Tworzenie analogu Haskella Każdy typ w Julii
- 23. XCodeBuild -exportArchive nie pozwala mi podać nazwy pliku
- 24. Czy może podać przykład dla EditorForModel z jego parametrami?
- 25. Czy pip.conf może jednocześnie podać dwa adresy URL?
- 26. Czy ktoś może sugerować dobrą bibliotekę więzów dla Haskella?
- 27. Jak mogę "ghci" używać mojej funkcji `show`?
- 28. Czy ktoś może mi podać przykład, w jaki sposób select() jest powiadamiany, aby fd stał się "gotowy"?
- 29. Czy ktoś może mi powiedzieć, co "fb: admins" nie może zostać przetworzone jako "fbid"?
- 30. Dziwne zachowanie w GHCi
Whoa, właśnie zdałem sobie sprawę, że punkty przerwania w przypadku opcji, po opublikowaniu zawiłe rozwiązanie połowiczne ... Wtedy zauważyłem tę odpowiedź. GHCi wypisuje typy wyrażeń w bieżącym zakresie, kiedy zatrzymuje się w punkcie przerwania bez żadnego specjalnego układania, więc jest to tylko kwestia umieszczenia. +1! –
Dobra wskazówka, ale nie działa, jeśli kod nie zostanie skompilowany. Odpowiedź Toma może się przydać. –