Last active
July 5, 2018 03:00
-
-
Save adacola/6962e6016282cf09b99a1dc63a294c47 to your computer and use it in GitHub Desktop.
クソコードであると表明するだけのコンピュテーション式。これ自体がクソコード
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
open System | |
type KusoBuilder() = | |
member __.Bind(x, f) = f x | |
member __.Return(x) = x | |
member __.ReturnFrom(x) = x | |
member __.Using(x: #IDisposable, f) = try f x finally if x |> box |> isNull |> not then x.Dispose() | |
member __.Zero() = () | |
member __.Combine(_, f) = f() | |
member __.TryWith(f, g) = try f() with e -> g e | |
member __.TryFinally(f, g) = try f() finally g() | |
member __.For(xs, f) = for x in xs do f x | |
member __.While(c, f) = while c() do f() | |
member __.Delay(f) = f | |
member __.Run(f) = f() | |
let kuso = KusoBuilder() | |
let kusoExample() = | |
kuso { | |
// let! を使うことで特にここがクソ!とアピールできるがそれ以外の機能はない | |
let! kuso1 = 1 + 1 | |
use kuso2 = { new IDisposable with member __.Dispose() = printfn "disposed" } | |
// do! で特にクソな部分な上に副作用まで発生させることを表明できる | |
do! printfn "kuso!" | |
for x in 1 .. 5 do | |
printfn "x : %d" x | |
let mutable y = 5 | |
while y > 0 do | |
printfn "y : %d" y | |
y <- y - 1 | |
return kuso1 + 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment