我试图编写一个函数来打印列表中任何类型的所有元素(包括我自己的数据类型),但是我发现并非所有类型都是show的实例。无论如何,有什么可以让haskell知道a类型是show的实例吗?或者我可以简单地将每种类型转换为字符串。这是我的代码。
displayList :: [a] -> IO()
displayList (x : xs)
| not (null xs) = (show x) ++ displayList xs
| otherwise = show x ++ show xs
答案 0 :(得分:8)
您可以在类型签名中指出类型必须是Show
的实例。
displayList :: Show a => [a] -> IO ()
您的递归看起来有点不对劲。我将从这个骨架开始:
displayList [] = _base
displayList (x : xs) = _rec
您不需要任何保护,也不需要使用null
。
注意:显示列表的某些方式需要两个基本情况:
displayList [] = _base0
displayList [x] = _base1
displayList (x : xs) = _rec
根据到目前为止的代码,我在这里不需要认为,但是由于您没有显示所需示例,因此很难确定。
>