我有一些函數(f2..fn)需要一個A,並返回Option [A]。這很好地工作(假設f1:X => Option [A])來做例如有權訪問選項容器的選項運算符
f1(x) flatMap f2 flatMap f3
現在我想能夠記錄會發生什麼,尤其是在沒有介紹的情況下。我希望能夠設置一個功能,如:
log_none(m:String):Option[A] => Option[A]
如果遇到None,會有記錄的副作用。
無的選擇功能,似乎對這項工作
理想的情況下(如閱讀後tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/),那麼它會是這個樣子:
f1(x) <.> log_none("f1 failed") flatMap f2 <.> log_none("f2 failed") ...
我不能立即看到一個優雅,慣用的方式來做到這一點 - 我不能看到任何東西放在<。>職位。
偉大的答案,我都喜歡。我認爲並且最接近我所要求的,隱式類對現有代碼的損害最小,而scalaz可能是最正確的方法。所以不知道哪一個可以接受。我將嘗試隱式類,看看如何解決這個問題。 – 2014-12-05 17:19:24