0

デフォルトでは、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を使用して改行を追加し、最後の行を次のように変更できます。snocByteStringMain.hs

main = L.writeFile "foo.json" $ encodePretty (ExampleRecord "a" "b") `L.snoc` BS.c2w '\n'

ただし、snocドキュメントではこれを O(n) 操作として説明しています。この改行を一定時間で追加する方法はありますか?

4

0 に答える 0