2015-03-26 14 views
8

Khi tôi nhìn scalaz.effect.IO mã nguồn, tôi nhận thấy rằng nó có một phương pháp apply với chữ ký sau đây:Tháp [A] và Ngà voi ở Scalaz là gì?

sealed trait IO[A] { 
    def apply(rw: Tower[IvoryTower]): Trampoline[(Tower[IvoryTower], A)] 
} 

Tower[A]IvoryTower được định nghĩa là:

case class Tower[A]() 
sealed trait IvoryTower 

Có một ví dụ của Tower :

object IvoryTower extends IvoryTowers 

trait IvoryTowers { 
    val ivoryTower = Tower[IvoryTower]() 
} 

Mục đích của điều này là gì e lớp học? Tại sao IO.apply chấp nhận một đối số thuộc loại Tower[IvoryTower]?

+2

Tôi cũng muốn Scalaz được ghi nhận. – rightfold

Trả lời

7

Đó là trò đùa: IvoryTower là một cổng thuộc loại Haskell có tên là RealWorld. (Tôi ước nó có một cái tên rõ ràng hơn - cái này quản lý cả hai không thể hiểu được đối với những người mới đến và không thực sự hài hước). Xem ví dụ https://wiki.haskell.org/IO_inside.

+0

Tại sao nó được gọi là IvoryTower? Tại sao không FunnyBanana hoặc IntrepidTiger? – ZhekaKozlov

+1

Vì tháp ngà được cho là ngược lại với thế giới thực. https://www.google.com/search?q=define%3Aivory%20tower – lmm

Các vấn đề liên quan