次のような式は、Idris では完全に有効です。
let x = Just 5 in let y = Just 6 in [|x / y|]
誰か次のような式を書いてくれませんか?
let x = Just 5 in let y = Just 6 in [| if x == 0 then 0 else y|]
私はそれをコンパイルすることができないようです。
次のような式は、Idris では完全に有効です。
let x = Just 5 in let y = Just 6 in [|x / y|]
誰か次のような式を書いてくれませんか?
let x = Just 5 in let y = Just 6 in [| if x == 0 then 0 else y|]
私はそれをコンパイルすることができないようです。
2つの問題に対処することで、これを機能させることができました。
if _ then _ else _
イディオムブラケットをその部分式に伝播していないようです
のデフォルトの定義if _ then _ else _
は (もちろん) 2 つのブランチで怠惰であり、Lazy' LazyEval
インスタンスを持ち上げないようです。
これら 2 つが回避されると、イディオム ブラケットで動作させることができました。ただし、これは、両方の分岐を取ると目に見える効果があるアプリケーションでは機能しないことに注意してください。
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 |]