Haskell:是否可以创建Show类型列表?目录[显示]?

时间:2014-04-06 13:50:19

标签: haskell

是否可以创建一个包含属于Show类型的值的列表?

这与Scala中的List[Showable]类似,其中Showable是一个特征。

通过这种方式,可以将IntString放入相同的列表中。

这可能吗?如果是,怎么样?

2 个答案:

答案 0 :(得分:13)

有可能:

{-# LANGUAGE GADTs #-}
data Showable where Showable :: Show a => a -> Showable
foo = [Showable 3, Showable "foo", Showable ()]

但我可以建议您使用[String],或者如果您真的需要[Int -> ShowS]的{​​{1}},可能会使用showsPrec,因为您可以使用这样的列表来展示所有内容内?

foo' = [show 3, show "foo", show ()]

答案 1 :(得分:6)

您可以使用existential types

执行此操作
data ShowBox = forall s. Show s => SB s

heteroList :: [ShowBox]
heteroList = [SB "Hello world", SB 5, SB 1]

您可以对此列表中的项目执行的唯一操作是show

let strings = fmap (\(SB b) -> show b) heteroList