默认情况下,Aeson encode
或encodePretty
不会在ByteString
附加一个尾随换行符。即,在vim中查看生成的文件时,我会看到[noeol]
指示符。
将换行符附加到文件的高效/惯用方法是什么?
这是Main.hs
的{{3}}:
{-# LANGUAGE DeriveGeneric #-}
import Data.Aeson
import Data.Aeson.Encode.Pretty
import GHC.Generics
import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString.Internal as BS
data ExampleRecord =
ExampleRecord {
field1 :: String
, field2 :: String
} deriving (Show, Generic)
instance ToJSON ExampleRecord
main = L.writeFile "foo.json" $ encodePretty (ExampleRecord "a" "b")
附带myproj.cabal
文件:
name: myproj
version: 0.1.0.0
build-type: Simple
cabal-version: >=1.10
executable emit-json
main-is: Main.hs
build-depends:
base >=4.8 && <4.9
, aeson
, aeson-pretty
, bytestring
default-language: Haskell2010
我可以使用SSCCE向foo.json
附加换行符,将Main.hs
中的最后一行更改为:
main = L.writeFile "foo.json" $ encodePretty (ExampleRecord "a" "b") `L.snoc` BS.c2w '\n'
但是,snoc
文档将此描述为O(n)操作。应该有一种方法可以在恒定的时间内附加这个换行符吗?