2014-11-02 17 views
5

Sono nuovo di Haskell e sto lavorando per testare la serializzazione JSON. Ecco ciò che il banco di prova si presenta come:Come creare stringhe multi-linea più leggibili in 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\"}" 

C'è un modo di scrivere che in un modo più leggibile? Forse qualcosa sulla falsariga di:

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

Questo non è necessariamente una stringa multilinea, ma se si prettified il JSON allora sarebbe. Mi stavo chiedendo in generale.

+1

Questo non è correlata alla domanda specifica, ma tutti quei 'do's sono inutili come sta in piedi, quindi puoi pulirne alcuni eliminando anche quelli. –

risposta

9

Basta utilizzare l'estensione quasi-citazioni e il pacchetto string-qq:

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

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

Con uscita:

*Main> someString 
"This is\"\nsome string with \"\" quotes and stuff\"!\n" 
Problemi correlati