我们如何在 Haskell 中区分列表和整数?换句话说,我需要一个函数,它为 3 返回 True 并为 [3] 返回 false 谢谢
问问题
219 次
2 回答
13
使用 sum 数据类型,例如Either
f :: Either Int [a] -> Bool
f (Left _) = True
f (Right _) = False
f (Left 3) -- evaluates to True
f (Right [3]) -- evaluates to False
f (Left 4) -- also evaluates to True, if you want to check for certain values
-- within each type you should handle them explicitly
于 2013-04-13T06:03:59.930 回答
11
这个问题毫无意义,因为您通常知道值是什么类型,如果不知道,您将很难弄清楚如何处理它。但是,它可能在 TemplateHaskell 或其他地方有用,所以......
class IsAList a where
isAList :: a -> Bool
instance IsAList Int where
isAList = const False
instance IsAList [a] where
isAList = const True
现在isAList [2] = True
和isAList (2 :: Int) = False
。请注意,isAList "asdf" = True
因为字符串是字符列表。
如果您可以详细说明为什么需要这个?...
于 2013-04-13T06:03:49.410 回答