Tôi chỉ quấn đầu quanh các monads (ít nhất tôi muốn nghĩ rằng mình có) và cụ thể hơn là đơn nguyên tiểu bang, một số người thông minh hơn tôi đã tìm ra, vì vậy tôi có thể câu hỏi này.State Monad, tại sao không phải là một bộ dữ liệu?
Dù sao, đơn nguyên nhà nước thường được thực hiện với một M < 'a> như một cái gì đó như thế này (F #):
type State<'a, 'state> = State of ('state -> 'a * 'state)
Bây giờ câu hỏi của tôi: Có bất kỳ lý do tại sao bạn không thể sử dụng một tuple đây? Khác thì sự mơ hồ có thể có giữa MonadA<'a, 'b>
và MonadB<'a, 'b>
mà cả hai đều trở thành bộ tóan tương đương ('a * 'b)
.
Edit: thêm ví dụ cho rõ ràng
type StateMonad() =
member m.Return a = (fun s -> a, s)
member m.Bind(x, f) = (fun s -> let a, s_ = x s in f a s_)
let state = new StateMonad()
let getState = (fun s -> s, s)
let setState s = (fun _ ->(), s)
let execute m s = m s |> fst
Câu hỏi là gì? Sử dụng một tuple ở đâu? Kiểu trả về của hàm là một tuple. – Brian
Không sử dụng tuple thay vì loại State và chỉ trả về một hàm thay vì State. – thr