同源列表在Haskell中有用吗?

时间:2014-04-06 08:52:18

标签: haskell mit-scheme

几个月前我开始学习Haskell。还知道使用异构列表的另一种功能语言Scheme编程。我想知道这两种类型列表的优缺点,以便比较两种设计。

1 个答案:

答案 0 :(得分:0)

同类列表的优点

这一切都与我朋友的类型有关。以举例为例,输入签名:

concat :: [ByteString] -> ByteString

从这种类型的签名中可以清楚地看到,它需要一个字符串列表,并将它们放在一起。对于异构列表,这是不可能的,因为表达列表类型并不容易。另一件需要考虑的事情是你的函数必须担心不同类型的对象。另一件需要考虑的事情是异构列表和同类列表之间的折衷:存在类型。

{-# LANGUAGE ExistentialQuantification #-}

data Showable = forall a. Show a => Pack a
instance Show Showable where
    show (Pack a)=show a

showableList :: [Showable]
showableList = [Pack 1, Pack "Yolo", Pack 5.2, Pack (3, 4), Pack ["A", "B", "C"], Pack 'c']

main=print showableList

这允许列表的各个部分是不同的类型,但它们只能以相同的方式使用。这可以与形状一起使用。如果他们在形状类的所有部分,你可以做像他们的区域等,但没有他们的半径。