如何将show应用于haskell中的任何类型?

时间:2019-03-02 04:24:35

标签: haskell

我试图编写一个函数来打印列表中任何类型的所有元素(包括我自己的数据类型),但是我发现并非所有类型都是show的实例。无论如何,有什么可以让haskell知道a类型是show的实例吗?或者我可以简单地将每种类型转换为字符串。这是我的代码。

displayList :: [a] -> IO()
displayList (x : xs)
    | not (null xs) = (show x) ++ displayList xs
    | otherwise = show x ++ show xs

1 个答案:

答案 0 :(得分:8)

您可以在类型签名中指出类型必须是Show的实例。

displayList :: Show a => [a] -> IO ()

您的递归看起来有点不对劲。我将从这个骨架开始:

displayList [] = _base
displayList (x : xs) = _rec

您不需要任何保护,也不需要使用null

注意:显示列表的某些方式需要两个基本情况:

displayList [] = _base0
displayList [x] = _base1
displayList (x : xs) = _rec

根据到目前为止的代码,我在这里不需要认为,但是由于您没有显示所需示例,因此很难确定。

>