我之前去研究過 monad ,得到的心得是:「這個東西對我沒有什麼啟發性,因為我在 Clojure 裡,用 vector 或是用 map 就可以夾帶一些資訊了。」
然而,前兩天看了一個很久以前的 talk ,它在介紹 variants 這個概念。看完之後,我有了全新的觀點:不是這些 monad, variants 東西對我沒有用,是早就一直在使用了,或是被 library/DSL 半強迫地要我用了…。
https://www.youtube.com/watch?v=ZQkIWWTygio
這邊先做超快速地介紹:
(1) 什麼是 variants ?
[:tag value]
(2) 什麼是 recursive variants?
[:app [:op [:val 15]
[:val 16]]]
基本上,hiccup 就算是一種 recursive variants。
(3) 誰用了 variants ?
Erlang 使用了 result variant
Hiccup 也可以視為是使用 variant
re-frame 也用了
還有很多時候,是該用,而沒有去用,所以就寫出爛 code 了