默认情况下,Aesonencode
或encodePretty
不将尾随换行符附加到ByteString
. 即,在 vim 中查看生成的文件时,我看到了[noeol]
指示符。
将换行符附加到文件的高性能/惯用方式是什么?
这是一个SSCCE:Main.hs
{-# 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
我可以foo.json
使用snoc
from 函数ByteString
添加换行符,将最后一行更改为Main.hs
:
main = L.writeFile "foo.json" $ encodePretty (ExampleRecord "a" "b") `L.snoc` BS.c2w '\n'
但是,snoc
文档将其描述为 O(n) 操作。是否应该有办法在恒定时间内附加这个换行符?