data Task = Task
{ id :: String
, description :: String
, dependsOn :: [String]
, dependentTasks :: [String]
} deriving (Eq, Show, Generic, ToJSON, FromJSON)
type Storage = Map String Task
s :: Storage
s = empty
addTask :: Task -> Storage -> Storage
addTask (Task id desc dep dept) = insert id (Task id desc dep dept)
removeTask :: String -> Storage -> Storage
removeTask tid = delete tid
changes = [addTask (Task "1" "Description" [] []), removeTask "1"]
main = putStrLn . show $ foldl (\s c -> c s) s changes
假設我有以下代碼。我想將changes
列表存儲在json文件中。但是我不知道如何與Aeson做到這一點,除了編寫自定義解析器外,還有一個更好的方法可以做到這一點。喜歡也許使用語言擴展派生(Generic, ToJSON, FromJSON)
爲addTask
和removeTask
等...如何將函數類型序列化爲haskell中的json?
編輯。對於所有說「你不能序列化功能」的人。
閱讀評論回答這個問題。
這就是說,它不是可以定義顯示實際上給你更多 ?有關功能的細節。 - 路易Wasserman 12年5月12日在14:51
當然是的。它可以顯示類型(通過Typeable給出);或者它可以顯示一些輸入和輸出(如在QuickCheck中完成的那樣)。
EDIT2。好的,我知道我不能在序列化中使用函數名。但是,這可以通過模板Haskell完成嗎?我看到aeson通過模板Haskell支持序列化,但作爲Haskell的新手無法弄清楚如何做到這一點。
您不能「顯示」或序列化或比較或檢查函數。 –
@ n.m嗯......我明明可以序列化一個函數應用程序並手動反序列化,對嗎?那麼爲什麼這不應該自動執行?這是相當機械的...你有一個函數名稱,你有它的參數你知道他們的類型... – user1685095
@ n.m。由於參照透明度等原因,你不能「顯示」功能。而我想要的並不需要做任何事情。我想看看函數名稱和它的參數,就是這樣。 – user1685095