跳轉到內容

面向型別程式設計/函子

來自華夏公益教科書,開放的書籍,開放的世界

函子是一種型別運算子,它配備了一個名為 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 {} 塊中。

華夏公益教科書