Reader Monad

Hôm nay vừa implement thử phiên bản nhỏ gọn cho Reader Monad trên Scala và Swift. Reader Monad là một trong 3 monad hay dùng và được implement cụ thể trong các thư viện Scalaz hay Swiftz.

Scala

case class Reader[E, A](g: E => A) {
  def apply(e: E) = g(e)
  def run: E => A = apply
  def map[B](f: A => B): Reader[E, B] = Reader(e => f(g(e)))
  def flatMap[B](f: A => Reader[E, B]): Reader[E, B] = Reader(e => f(g(e))(e))
}
Reader((i:Int) => i+1)(4)
Reader((i:Int) => i+1).map{i => i+2}(4)
Reader((i:Int) => i+1).flatMap{i => Reader(_ => i+2)}(4)

Swift

class Reader<E, A> {
  let g: E -> A
  init(g: E -> A) {
      self.g = g
  }
  func apply(e: E) -> A {
      return g(e)
  }
  func map<B>(f: A -> B) -> Reader<E, B> {
      return Reader<E, B>{ e in f(self.g(e)) }
  }
  func flatMap<B>(f: A -> Reader<E, B>) -> Reader<E, B> {
      return Reader<E, B>{ e in f(self.g(e)).g(e) }
  }
}
Reader{i in i+1}.run(4)
Reader{i in i+1}.map{i in i+2}.run(4)
Reader{i in i+1}.flatMap{i in Reader{_ in i+2}}.run(4)

Reference

Reader Monad rất hay được dùng trong DI mà lần trước mình có viết 1 lần.


Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Vu Nhat Minh

54 bài viết.
819 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
127 30
Nếu bạn thường vào trang mua sắm của amazon, chắc sẽ chẳng lạ gì với menu Shop by Department. Tốc độ hiển thị nội dung của menu là tức thì so với d...
Vu Nhat Minh viết 3 năm trước
127 30
White
100 4
Lời người dịch Người dịch là một developer , sau khi tìm đọc được bài viết này bằng bản gốc tiếng Anh đã cảm thấy như được "khai sáng" về khả năng...
Vu Nhat Minh viết hơn 3 năm trước
100 4
White
68 7
Form là thành phần quan trọng nhất khi design flow đăng ký của 1 web hay 1 app, dù là view gồm nhiều bước hay chỉ là một màn hình đơn điệu. Bài này...
Vu Nhat Minh viết gần 2 năm trước
68 7
Bài viết liên quan
White
8 0
Một vài khái niệm: Concrete type: kiểu dữ liệu cụ thể, không nhận bất cứ tham số nào. VD: Int, Bool, Construct type: kiểu dữ liệu nhận các tham s...
kiennt viết 2 năm trước
8 0
White
33 17
Mình tìm thấy một bài rất hay về Functional Programming (lập trình hàm), giải thích các khái niệm bằng hình vẽ dễ hiểu. Bài này mình sẽ dịch lại và...
Vu Nhat Minh viết hơn 2 năm trước
33 17
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
54 bài viết.
819 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!