2011-10-06 28 views

Trả lời

20

Có ít nhất ba thư viện iteratee:

  • Enumerator
  • iteratee
  • iterIO

Tôi tin rằng Enumerator thư viện là một trong những ưu tiên hiện nay, vì nó sự đơn giản. Nó cũng là cái tôi sử dụng cho các dự án của tôi, nếu bạn quan tâm. Hai gói còn lại linh hoạt hơn và có thể nhanh hơn, nhưng chúng cũng phức tạp hơn. Nếu bạn muốn tìm hiểu iteratees tôi đề nghị bắt đầu với điều tra. Đây là triển khai trực tiếp nhất về ý tưởng ban đầu của Oleg.

Nếu bạn có trường hợp sử dụng cụ thể và cần nhiều tính năng với phương pháp tiếp cận lặp chuẩn, bạn có thể cân nhắc sử dụng gói iteratee. Trong các tình huống phức tạp hơn, bạn cũng có thể muốn thử gói iterIO, có khái niệm hơi khác và linh hoạt hơn. Trong các iterate cụ thể có thể giao tiếp với điều tra viên, điều không thể có trong hai gói còn lại.

Nếu cả ba gói không đủ linh hoạt, có thể bạn muốn tự mình viết chính mình với gói monad-coroutine. Iteratees và enumerators là một loại đặc biệt của coroutines, có thể được sáng tác theo một cách nhất định. Gói monad-coroutine mang đến cho bạn loại chung và cho phép bạn sử dụng khái niệm tương tác của riêng mình.

+3

Một số nhỏ nit: iteratee 'iteratee' có thể giao tiếp với điều tra viên. Ví dụ, đó là cách 'tìm kiếm' được thực hiện. Nó không phức tạp như cơ chế 'iterio'. –

+0

@ertes, về các thuộc tính khác, ví dụ: hiệu quả/hiệu suất? Có thể kết hợp các thư viện không sử dụng cùng một thư viện iteratee? – hvr

+0

Nói chung là không, các thư viện không tương thích với nhau. – ertes