我在json中有一个国家/地区ID和国家/地区文本列表
{
1 : "country one",
2 : "country two"
}
我创建了以下代码来表示haskell中的国家/地区ID和文本
data Country a = Country a
country1 :: Country String -- Representing country name
country1 = Country "country one"
country2 :: Country Integer -- Representing country id
country2 = Country 2
以上代码工作正常。但是我想把 a 的约束只取值String和Integer。
为此,我尝试了下面的代码。但是,它无法正常工作。
{-# LANGUAGE GADTs #-}
data Country a where
Country :: (String, Integer) => a -> Country a
toId :: Country String -> Country Integer
toId Country a = Country 1
toText :: Country Integer -> Country String
toText Country a = Country "country one"
任何人都可以帮助弄清楚如何以最佳方式实现上述代码,以便它能够正常工作吗?
答案 0 :(得分:0)
GADT对于这项任务来说太过分了,IMO。
你不能只使用ADT吗?
data Country = CountryWithInt Int
| CountryWithString String