要为[String, Int]创建一个新类型,你可以使用Aeson库中的deriveJSON
函数来自动推导JSON编码和解码的实例。下面是一个示例代码:
{-# LANGUAGE DeriveGeneric #-}
import Data.Aeson (ToJSON, FromJSON)
import GHC.Generics (Generic)
-- 定义一个新类型
data MyType = MyType [String] Int
deriving (Show, Generic)
-- 自动推导JSON编码和解码的实例
instance ToJSON MyType
instance FromJSON MyType
-- 示例用法
main :: IO ()
main = do
let myValue = MyType ["hello", "world"] 42
putStrLn $ "Original value: " ++ show myValue
-- 编码为JSON字符串
let jsonStr = encode myValue
putStrLn $ "JSON string: " ++ jsonStr
-- 解码为MyType类型
case decode jsonStr of
Just decodedValue -> putStrLn $ "Decoded value: " ++ show (decodedValue :: MyType)
Nothing -> putStrLn "Failed to decode"
在上面的示例中,首先定义了一个新类型MyType
,它包含一个[String]和一个Int。然后使用deriveGeneric
扩展来自动推导Generic
实例。
然后,通过为MyType
类型实现ToJSON
和FromJSON
类型类的实例,可以自动推导JSON编码和解码。
最后,在main
函数中,创建了一个MyType
类型的值myValue
,并将其编码为JSON字符串。然后,通过解码JSON字符串,可以将其还原为MyType
类型的值,并打印出来。
这是一个基本的示例,你可以根据需要进行修改和扩展。