几个月前我开始学习 Haskell。还知道使用异构列表的另一种功能语言方案中的编程。我想知道这两种列表的优缺点,以便可以比较两种设计。
问问题
365 次
1 回答
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
这允许列表的各个部分是不同的类型,但它们只能以相同的方式使用。这可以与形状一起使用。如果它们是形状类的所有部分,你可以做一些事情,比如获取它们的面积等,但没有它们的半径。
于 2014-04-06T13:38:11.783 回答