2014-11-02 12 views
5

Jestem nowy w Haskell i pracuję nad testowaniem serializacji JSON. Oto przykładowy przypadek testowy:Jak utworzyć bardziej czytelne wieloliniowe ciągi w Haskell?

{-# LANGUAGE OverloadedStrings #-} 

module WetlandsTest where 

import Control.Exception (evaluate) 
import Test.Hspec 
import Wetlands 

main :: IO() 
main = hspec $ do 
    describe "wetlands" $ do 
    describe "spotting" $ do 
     it "returns a json encoded spotting" $ do 
     let record = spotting "Snowy Egret" "California" "low tide" 
     record `shouldBe` "{\"bird\":\"Snowy Eget\",\"state\":\"California\",\"meta\":\"low tide\"}" 

Czy istnieje sposób na zapisanie tego w bardziej czytelny sposób? Może coś wzdłuż linii:

record `shouldBe` """ 
{"bird":"Snowy Eget","city":"California","meta":"low tide"} 
""" 

To niekoniecznie jest multiline ciąg, ale jeśli prettified JSON to byłoby. Po prostu zastanawiam się ogólnie.

+1

ta nie jest związana z konkretnym pytaniem, ale wszystkie z tych 'do's są niepotrzebne, jak to stoi, więc możesz je trochę wyczyścić, również eliminując je. –

Odpowiedz

9

Wystarczy użyć rozszerzenia quasi-cytatów i pakiet string-qq:

{-# LANGUAGE QuasiQuotes #-} 
import Data.String.QQ 

someString :: String 
someString = [s| 
This is" 
some string with "" quotes and stuff"! 
|] 

Z wyjściem:

*Main> someString 
"This is\"\nsome string with \"\" quotes and stuff\"!\n" 
Powiązane problemy