デフォルトでは、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
関数 fromfoo.json
を使用して改行を追加し、最後の行を次のように変更できます。snoc
ByteString
Main.hs
main = L.writeFile "foo.json" $ encodePretty (ExampleRecord "a" "b") `L.snoc` BS.c2w '\n'
ただし、snoc
ドキュメントではこれを O(n) 操作として説明しています。この改行を一定時間で追加する方法はありますか?