2015-01-06 47 views

回答

3

我能採取的兩個問題護理得到這個工作:

  1. if _ then _ else _似乎並不成語支架傳播到其子表達式

  2. if _ then _ else _默認定義是(當然)在它的兩個分支懶惰,並且Lazy' LazyEval似乎不解除實例。

一旦解決了這兩個問題,我就可以在成語括號中找到它。但請注意,這對於採用兩個分支都具有可觀察效果的應用程序不起作用。

strictIf : Bool -> a -> a -> a 
strictIf True t e = t 
strictIf False t e = e 

syntax "if" [b] "then" [t] "else" [e] = strictIf b t e 

test : Maybe Float 
test = let x = Just 5 
      y = Just 6 
     in [| if [| x == pure 0 |] then [|0|] else y |] 
+0

哦,天哪!我花了一段時間才弄清楚這實際上是如何工作的。最後一個表達式看起來好像不應該首先編譯,但我想我現在明白它的工作原理。 – jedesah

+2

我會把它當作「不是真的」。因爲我認爲在這一點上Idiom Brackets是不值得的。感謝您花時間回答我的問題! – jedesah

相關問題