2013-04-06 18 views
13

Obserwuję książkę Yesod, który stanowi:GHC -ddump-spawów opcja - Szablon Haskell

Ale używając opcji GHC -ddump-spawów, możemy uzyskać natychmiastowy przyjrzeć wygenerowany kod. Znacznie oczyszczona wersja to:

Jak to zrobić? Próbowałem kompilowania mój plik z ghc -XTemplateHaskell -ddump-splices Page.hs, który pozostawia katalogu następująco:

Page Page.hi Page.hs Page.hs~ Page.o

żaden z tych plików zawiera jednak pośredni kod wygenerowany przez Template Haskell.

http://www.yesodweb.com/book/basics

+1

Totalna nowość tutaj - w jaki sposób należy użyć tego polecenia? Jeśli uruchomię GHC, jak napisałeś (zamiast tego z helloworld.hs), otrzymam komunikat "Nie mogę znaleźć modułu" Yesod "" Mogę tylko kompilować/uruchamiać używając 'stack runghc helloworld.hs' – Ixx

Odpowiedz

12

Tymczasem zachowanie zmieniło a flaga -ddump-to-file oprócz flagi -ddump-splices powoduje sploty mają być zapisane do pliku, zobacz Section 9.26 prądu (GHC 8.2.1) dokumentację po więcej szczegółów.


W starszych wersjach GHC (nie sprawdzić w jakiej wersji dokładnie zachowanie zmieniło), -ddump-splices pracował inaczej:

Opcja -ddump-splices powoduje GHC zrzucić spawów na stderr. Niestety, flaga -ddump-to-file nie wpływa spawów (nie wiem, czy to ma głębsze przyczyny lub jest po prostu przeoczenie), więc trzeba uchwycić wyjście stderr, aby zapisać spawów do późniejszego dochodzenia

ghc -XTemplateHaskell -ddump-splices Page.hs 2> Page.dump-splices 

na wystarczająco powłokach przypominających bash.

+1

Dzięki. Dlaczego wyprowadza się na stderr zamiast, powiedzmy, stdout? –

+3

Nie wiem. Może istnieć przyczyna lub może to być wypadek historyczny. Prawdopodobnie trzeba poprosić HQ o odpowiedź. –

+1

Zgodnie z https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/template-haskell.html zostało to zmienione w międzyczasie. Domyślnie deklaruje zrzut do domyślnego stdout, a '-ddump-to-file' powinien zrzucić do pliku' .dump-splices'. – robx