2016-05-13 8 views
1

Ich versuche, Jessod zu lernen und zu versuchen, eine einfache REST-App zu implementieren, wo immer ich eine GET Anfrage ich schreibe etwas in eine Datei. Im Moment habe ich die folgende Handler-Funktion:Haskell Yesod und writeFile

getTestR = 
    do 
    return $ writeFile "test.txt" "Just something" 
    return $ object ["result" .= "Ok"] 

Was ich erwartet hatte, dass die Datei test.txt würde erstellt werden, und ich würde einen JSON mit {result=Ok} erhalten. Ich erhalte jedoch den JSON, aber die Datei wird nicht erstellt.

Ich denke, die writeFile wird nicht wegen der faulen Bewertung ausgewertet, aber ich habe keine Ahnung, wie dieses Problem zu überwinden. Danke im Voraus.

+0

zuerst die 'return' entfernen und sehen, was der Compiler Sie über die Art erzählt ... dann sucht' liftIO';) – Carsten

+0

'return' hier hüllt die' IO 'Berechnung in Ihre Yesod-Monade und dann einfach ignoriert - Sie können dies in einfachen' IO' tun tun - wenn Sie 'GHCi' öffnen und' return (print "Hallo") eingeben, werden Sie sehen ... * nichts * - 'IO (IO())' wird einfach ignoriert – Carsten

+0

Ja, vielen Dank für Ihre Antwort, ich hatte nicht die Rückkehr, ich habe es aus diesem Grund hinzugefügt: – Kabal

Antwort

1

verwenden nur liftIO:

getTestR = 
    do 
    liftIO $ writeFile "test.txt" "Just something" 
    return $ object ["result" .= "Ok"]