improve
:: Fractional b
=> (b
-> c
) -> (b
, a
) -> (b
, c
)improve f (x, _) = (newX, f newX) where newX = x+0.1
optimize f goal x
= until isDone
(improve f
) (0, f x
) where isDone (_, err) = err < goal
main
= print $ optimize f
0.5 0
ZiA6OiBOdW0gYSA9PiBhIC0+IGEKZiB4ID0gYWJzKDQyLXgpXjIKCmltcHJvdmUgOjogRnJhY3Rpb25hbCBiID0+IChiIC0+IGMpIC0+IChiLCBhKSAtPiAoYiwgYykKaW1wcm92ZSBmICh4LCBfKSA9IChuZXdYLCBmIG5ld1gpIHdoZXJlIG5ld1ggPSB4KzAuMQoKb3B0aW1pemU6OiAoT3JkIGEsIEZyYWN0aW9uYWwgYikgPT4gKGIgLT4gYSkgLT4gYSAtPiBiIC0+IChiLCBhKQpvcHRpbWl6ZSBmIGdvYWwgeCA9IHVudGlsIGlzRG9uZSAoaW1wcm92ZSBmKSAoMCwgZiB4KQogICAgd2hlcmUgaXNEb25lIChfLCBlcnIpID0gZXJyIDwgZ29hbAoKbWFpbiA6OiBJTyAoKQptYWluID0gcHJpbnQgJCBvcHRpbWl6ZSBmIDAuNSAw