while read var
do
echo "s/"$var"//g" >> sed.script2
done < 1.txt
sed --file=sed.script2 2.txt > 3.txt
rm -f sed.script
类型是和类型。
Maybe Int
根据我的理解,这是因为data Maybe Int = Nothing | Just Int
值构造函数不带参数,第二个值Nothing
构造函数只接受一个参数。因此,因为没有值构造函数需要多个参数,所以此类型是产品类型。
下面的类型是产品类型,因为它的数据构造函数有两个参数,因此是产品类型。
Just
但是,我不确定如何在总和和产品类型的上下文中对以下类型进行分类。我们该如何参考?
data Colour = Person String Int
答案 0 :(得分:12)
所有data
类型都是“产品总和”。
我们总结了构造函数的数量,并且对于每个构造函数,我们乘以参数的数量。
有时总和是微不足道的。如果只有一个构造函数,或者根本没有构造函数,我们总结一个单例或空集。对单个构造函数求和使得结果类型与产品同构。总结没有构造函数使得类型为空(例如Data.Void.Void
)。
有时,一些产品也是微不足道的。当存在单个参数或根本没有参数时,我们乘以单个参数或空集。乘以单个参数T
只会产生T
(提升后)。乘以无参数会产生只有一个值的类型(例如()
)。
因此,有时我们的data
是一小部分产品的非平凡总和,我们称之为“总和”;有时它是一些微不足道的非平凡产品,我们称之为“产品”。但是,在一般情况下,它始终是“产品之和”。
请注意,代数类型(直到同构)形成一个可交换的半环,满足高中代数与求和和产品大致相同的规律。在高中代数中,我们可以将涉及嵌套和和乘积的任何表达式转换为多项式,即转换为“乘积之和”。这也适用于类型(直到同构),因此选择使data
类型为“产品总和”是相当富有表现力的。
答案 1 :(得分:2)
Maybe Int
类型是和类型,因为它具有替换
data SumType = This | That
它在其构造函数上有参数的事实不会影响它的“总和”。 Sum类型还可以包含产品构造函数,例如:
type Username = String
type Email = String
-- User is a sum of three products
data User = NotLoggedIn -- nullary constructor
| Guest Username -- unary constructor
| RegisteredUser Username Email -- binary constructor