第七天:函子
函子时范畴间的映射。函子F可以将C中的对象a映射到D中的Fa。但是范畴中可不仅仅有对象,也有态射。C中的态射`f::a->b`会被映射到D中`Ff::Fa->Fb`。函子保留了范畴的结构。在范畴C中链接的对象也在范畴D中相连。不仅如此,范畴的组合关系也依旧保持着。`h=g.f`,那么也有`Fh=Fg.Ff`。
函子比函数更加严格——函子必须保留范畴的结构。注意,D可能比C小,C中的多个对象可能映射到同一个对象,多个态射可能揉成一个,但是组合的性质必须保持不变。D也可能比C大。在最极限的情况下,源范畴可以是singleton,只有一个对象和一个态射,从singleton范畴到任意其他范畴的函子就像是从其他范畴中取出一个对象和态射。反过来,源范畴最大的函子叫做constant functor。它将任一个源范畴的的对象映射到目标范畴中的某一个元素c,并将源范畴中的所有态射映射到idc。它就像是一个黑洞一样,将所有的数据压缩到一个点。
我们先讨论将范畴C中的对象映射到自身的函子——endofunctors。比如Maybe函子。
```haskell
data Maybe a = Nothing | Just a
```
Maybe不是一个类型,而是一个类型构造器。函子不仅仅要映射对象,也要映射态射。也就是说,对于一个函数`f :: a->b`,我们希望产生一个新函数`Maybe a -> Maybe b`。我们通常用一个高阶函数来实现这种映射。`map :: (a -> b) -> (Maybe a) -> (Maybe b)`。我们也叫map提升(lift)了一个function。
函子可以被视为包含了某种类型的值得容器。由于haskell的惰性求值,函数和数据之间其实没有明显的区分。`nats = [1..]`无穷列表好像是数据,但其实由函数实现。反过来,记忆化的函数可以看作一个表,也可以视为一种数据。所以容器中的值不一定是真实存在的。想想Future,想象IO,其实这是很自然的。我们其实不关心是否任何时候都可以获取容器中的值,我们关心的是如何对容器中的“值”进行操作,或者操作的组合。
作为范畴间的映射,函子当然也可以组合,显然函子的组合也是满足结合率的。在每个范畴中,也有一个平凡的函子:将每个对象和态射都映射回自己。所以函子和范畴也能组成一个新的范畴,新的范畴中原来的范畴是对象,态射是函子。我们得到了范畴的范畴。我们又得到了某种递归,相似的结构在不同的层次上反复出现。将来我们会看到函子也是范畴。
函子时范畴间的映射。函子F可以将C中的对象a映射到D中的Fa。但是范畴中可不仅仅有对象,也有态射。C中的态射`f::a->b`会被映射到D中`Ff::Fa->Fb`。函子保留了范畴的结构。在范畴C中链接的对象也在范畴D中相连。不仅如此,范畴的组合关系也依旧保持着。`h=g.f`,那么也有`Fh=Fg.Ff`。
函子比函数更加严格——函子必须保留范畴的结构。注意,D可能比C小,C中的多个对象可能映射到同一个对象,多个态射可能揉成一个,但是组合的性质必须保持不变。D也可能比C大。在最极限的情况下,源范畴可以是singleton,只有一个对象和一个态射,从singleton范畴到任意其他范畴的函子就像是从其他范畴中取出一个对象和态射。反过来,源范畴最大的函子叫做constant functor。它将任一个源范畴的的对象映射到目标范畴中的某一个元素c,并将源范畴中的所有态射映射到idc。它就像是一个黑洞一样,将所有的数据压缩到一个点。
我们先讨论将范畴C中的对象映射到自身的函子——endofunctors。比如Maybe函子。
```haskell
data Maybe a = Nothing | Just a
```
Maybe不是一个类型,而是一个类型构造器。函子不仅仅要映射对象,也要映射态射。也就是说,对于一个函数`f :: a->b`,我们希望产生一个新函数`Maybe a -> Maybe b`。我们通常用一个高阶函数来实现这种映射。`map :: (a -> b) -> (Maybe a) -> (Maybe b)`。我们也叫map提升(lift)了一个function。
函子可以被视为包含了某种类型的值得容器。由于haskell的惰性求值,函数和数据之间其实没有明显的区分。`nats = [1..]`无穷列表好像是数据,但其实由函数实现。反过来,记忆化的函数可以看作一个表,也可以视为一种数据。所以容器中的值不一定是真实存在的。想想Future,想象IO,其实这是很自然的。我们其实不关心是否任何时候都可以获取容器中的值,我们关心的是如何对容器中的“值”进行操作,或者操作的组合。
作为范畴间的映射,函子当然也可以组合,显然函子的组合也是满足结合率的。在每个范畴中,也有一个平凡的函子:将每个对象和态射都映射回自己。所以函子和范畴也能组成一个新的范畴,新的范畴中原来的范畴是对象,态射是函子。我们得到了范畴的范畴。我们又得到了某种递归,相似的结构在不同的层次上反复出现。将来我们会看到函子也是范畴。
上週四得到大家支持實在太開心!希望 #暖男直播室可以越嚟越好,有賴你們的鼓勵支持,今晚終於進入第11集啦!8:30見啦,分享上週相片讓大家可以開心重溫
#Mr.Right 右公子暖男團 主持 #白倩蘭 #白姐姐 + #暖男 #Nats 「唱歌•傾計•講故仔」逢星期四 8:30pm同大家見 請幫忙分享歡迎留言讚好點唱
#Mr.Right 右公子暖男團 主持 #白倩蘭 #白姐姐 + #暖男 #Nats 「唱歌•傾計•講故仔」逢星期四 8:30pm同大家見 請幫忙分享歡迎留言讚好點唱
每天都过得超级忙碌。
开学了。
昨日上午志愿者,中午带孩子们去学校做了个核酸。下午睡了个回笼觉,孩子们自己撒野去了,加之来例假,晚上躺床上动弹不得,晚饭都没力气做。孩子们给我削了个苹果,自己看了小红书做了土豆香肠闷饭,两个人吃了个精光,还一直嚷嚷着没吃饱,做的太少了。大宝连喝了3瓶250ml的牛奶,只喊,饭饱40%,奶饱60%。
今天一早学校报道-补牙-中饭-10分钟快闪网红白塔市集-大提琴-理发-吃冰棍-逛山塘街。到家两个孩子看到小区伙伴嚷嚷着要玩。没让,小的吼住了,大的还是偷摸了下去20分钟,他没带手表,过了一会自己上来了,内心是窃喜的,虽然内心有火,但没发。和小儿商量是打断腿还是没有六一礼物,让他自己选。还好母慈子孝的,龟速前进的完成了今日计划。
明早:肉包+黄瓜+牛奶。听nats.
又到早饭营业时间了,肉粽/手抓饼/小馄饨/面条,轮番来吧。
山塘街之行,背了个大提琴,一来体力不行,实则没心情。观察路上形形色色的人群。会打扮漂亮都是女孩越来越多。恩爱情侣夫妻也很多。更显凄凉
开学了。
昨日上午志愿者,中午带孩子们去学校做了个核酸。下午睡了个回笼觉,孩子们自己撒野去了,加之来例假,晚上躺床上动弹不得,晚饭都没力气做。孩子们给我削了个苹果,自己看了小红书做了土豆香肠闷饭,两个人吃了个精光,还一直嚷嚷着没吃饱,做的太少了。大宝连喝了3瓶250ml的牛奶,只喊,饭饱40%,奶饱60%。
今天一早学校报道-补牙-中饭-10分钟快闪网红白塔市集-大提琴-理发-吃冰棍-逛山塘街。到家两个孩子看到小区伙伴嚷嚷着要玩。没让,小的吼住了,大的还是偷摸了下去20分钟,他没带手表,过了一会自己上来了,内心是窃喜的,虽然内心有火,但没发。和小儿商量是打断腿还是没有六一礼物,让他自己选。还好母慈子孝的,龟速前进的完成了今日计划。
明早:肉包+黄瓜+牛奶。听nats.
又到早饭营业时间了,肉粽/手抓饼/小馄饨/面条,轮番来吧。
山塘街之行,背了个大提琴,一来体力不行,实则没心情。观察路上形形色色的人群。会打扮漂亮都是女孩越来越多。恩爱情侣夫妻也很多。更显凄凉
✋热门推荐