Câu hỏi này không có nghĩa là mồi lửa! Có thể thấy rõ ràng, gần đây tôi đã xem xét Scalaz. Tôi đang cố gắng hiểu lý do tại sao Tôi cần một số chức năng mà thư viện cung cấp. Dưới đây là một cái gì đó:Scalaz: yêu cầu sử dụng vỏ bọc cho thành phần Cokleisli
import scalaz._
import Scalaz._
type NEL[A] = NonEmptyList[A]
val NEL = NonEmptyList
tôi đặt một số báo cáo println trong các chức năng của tôi để xem những gì đang xảy ra (sang một bên: điều gì sẽ Tôi đã làm nếu tôi đã cố gắng để tránh tác dụng phụ như thế?). chức năng của tôi là:
val f: NEL[Int] => String = (l: NEL[Int]) => {println("f: " + l); l.toString |+| "X" }
val g: NEL[String] => BigInt = (l: NEL[String]) => {println("g: " + l); BigInt(l.map(_.length).sum) }
Sau đó, tôi kết hợp chúng thông qua một cokleisli và vượt qua trong một NEL[Int]
val k = cokleisli(f) =>= cokleisli(g)
println("RES: " + k(NEL(1, 2, 3)))
gì in này?
f: NonEmptyList(1, 2, 3)
f: NonEmptyList(2, 3)
f: NonEmptyList(3)
g: NonEmptyList(NonEmptyList(1, 2, 3)X, NonEmptyList(2, 3)X, NonEmptyList(3)X)
RES: 57
Giá trị RES là số ký tự của phần tử (Chuỗi) trong NEL cuối cùng. Hai điều xảy ra với tôi:
- Làm cách nào để biết rằng NEL của tôi sẽ bị giảm theo cách này từ chữ ký của phương thức liên quan? (Tôi không mong đợi kết quả ở tất cả)
- Điểm này là gì? Trường hợp sử dụng hợp lý đơn giản và dễ theo dõi có thể được chưng cất cho tôi không?
Câu hỏi này là một lời biện hộ mỏng che kín mặt-đối với một số người đáng yêu như retronym để giải thích như thế nào thư viện mạnh mẽ này thực sự hoạt động.
Cảm ơn câu trả lời này - Tôi đã chấp nhận * từ viết tắt * vì anh ấy đã trả lời yêu cầu cho một ca sử dụng nhưng trường hợp này vẫn tuyệt vời! –
Không đổ mồ hôi, tôi đã chỉnh sửa câu trả lời của từ viết tắt để thêm ví dụ về thành phần cokleisli. – Apocalisp
Tôi tin rằng bạn "bạn có thể' ánh xạ (f) 'để có được' W [W [A]] => W [B] '", than ôi, tôi không có quyền chỉnh sửa. –