0

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

4

1 回答 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 回答