跳转到内容

面向类型编程/函子

来自维基教科书,开放的书籍,开放的世界

函子是一种类型运算符,它配备了一个名为 map 的方法,声明如下

type Functor[T] {
  func map[U](f Func[T,U]) Self[U]
}

map 方法必须满足一些形式要求,我们现在忽略这些要求。重要的是,map 接受一个类型为 Func[T,U] 的函数(其中 U 是方法的类型参数),并返回一个类型为 Self[U] 的实例,即相同但可能具有不同类型参数的函子。您已经遇到了 Maybe 函子

type Maybe[T] : Functor[T] {
  property val T

  func map[U](f Func[T,U]) Self[U] {
    return new Self[U] {
      val = self.val.isNil() ? nil : f(self.val)
    }
  }

  func description() String {
    return self.val.isNil() ? "none" : self.val.description()
  }
}

在下一节中,我们将使用 Maybe 来解释什么是单子以及如何实现泛型 Monad 类型。

注意:伪代码可以使用 Funcy 应用程序进行尝试,该应用程序可以从 Apple App Store (iOS/macOS)Google Play (Android)Amazon Appstore 免费下载。要执行的代码必须放在 main {} 块中。

华夏公益教科书