計算機科学のブログ

実践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\"}"
%