NOTE: functional programming 對執行區塊上鎖
functional programming 中讓一個函數執行時與特定鎖結合可以用高階函式確保這個模式不被意外打破
let withLock : mutex -> (a -> b) -> a -> b = fun mu f x -> acquire mu; let r = f x in release mu; r
這件事好玩之處在很容易觀察到下面的用法
withLock mu (fun _ -> ...) ()
進而衍伸出讓區塊轉化成匿名函數的語法糖
withLock mu { ... }
像是把上面的 { ... }
轉化成 fun _ -> ...
。實務上 Kotlin 就有類似的轉換。