実践Haskell Aesonを使ったJSONデータの処理 独自のInt型のリストを作成、インスタンス、ToJSON、toJSON関数、Generics
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT7(実践Haskell)、LESSON 40(Aesonを使ったJSONデータの処理)、40.6(練習問題)Q40-2の解答を求めてみる。
コード
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics (Generic)
import qualified Data.ByteString.Lazy.Char8 as BC
import Data.Aeson (ToJSON, encode)
data IntList = EmptyList
| Cons Int IntList deriving (Show, Generic)
instance ToJSON IntList
intListExample :: IntList
intListExample = Cons 1 $
Cons 2 EmptyList
json :: BC.ByteString
json = encode intListExample
main :: IO ()
main = do
print intListExample
print json
入出力結果(Terminal, Zsh)
% runghc sample2.hs
Cons 1 (Cons 2 EmptyList)
"{\"contents\":[1,{\"contents\":[2,{\"tag\":\"EmptyList\"}],\"tag\":\"Cons\"}],\"tag\":\"Cons\"}"
%