sel*_*rus 2 reflection haskell functional-programming
我有多个对象,每个对象都与一个字符串关联。是否有某种模式允许以类型安全的方式获取所有字符串的列表?
data MyObject = Foo | Bar
getObjectString :: MyObject -> String
getObjectString Foo = "Foo"
getObjectString Bar = "Bar"
-- Bad because not type safe and String duplication
listOfAllObjectStrings :: [String]
listOfAllObjectStrings = ["Foo", "Bar"]
Run Code Online (Sandbox Code Playgroud)
不同的解决方案仍然不是类型安全的,但减少了字符串重复。
data MyObject = Foo | Bar
getObjectString :: MyObject -> String
getObjectString Foo = listOfAllObjectString !! 0
getObjectString Bar = listOfAllObjectString !! 1
listOfAllObjectStrings :: [String]
listOfAllObjectStrings = ["Foo", "Bar"]
Run Code Online (Sandbox Code Playgroud)
MyObject一旦导出Enum和 ,您就可以获得 的所有值Bounded。然后,您将应用getObjectString每个值来获取字符串值。
data MyObject = Foo | Bar deriving (Enum, Bounded)
getObjectString :: MyObject -> String
getObjectString Foo = "Foo"
getObjectString Bar = "Bar"
listOfAllObjectStrings :: [String]
listOfAllObjectStrings = map getObjectString [minBound .. maxBound]
Run Code Online (Sandbox Code Playgroud)