data Solution =
| NoSolutions
deriving ( Show )
promptDouble text = do
hFlush stdout
case readMaybe line of
Nothing
-> putStrLn "Invalid number entered" >> promptDouble text
sqrtEquation a b c
| d < 0.0 = NoSolutions
| d == 0.0 = OneSolution x1
| d > 0.0 = TwoSoulutions x1 x2
where d = b* b - 4 * a* c
x1 = f a b d ( + )
x2 = f a b d ( - )
f a b d operator
= ( operator
( - b
) sqrt d
) / 2 * a
main = do
a <- promptDouble "Input a: "
b <- promptDouble "Input b: "
c <- promptDouble "Input c: "
let result
= show ( sqrtEquation a b c
)
aW1wb3J0IFN5c3RlbS5JTwppbXBvcnQgVGV4dC5SZWFkCgpkYXRhIFNvbHV0aW9uID0gCiAgICAgT25lU29sdXRpb24gRG91YmxlCiAgIHwgVHdvU291bHV0aW9ucyBEb3VibGUgRG91YmxlCiAgIHwgTm9Tb2x1dGlvbnMgZGVyaXZpbmcgKFNob3cpCgpwcm9tcHREb3VibGUgOjogU3RyaW5nIC0+IElPIERvdWJsZQpwcm9tcHREb3VibGUgdGV4dCA9IGRvCiAgICBwdXRTdHIgdGV4dAogICAgaEZsdXNoIHN0ZG91dAogICAgbGluZSA8LSBnZXRMaW5lCiAgICBjYXNlIHJlYWRNYXliZSBsaW5lIG9mCiAgICAgICAgIEp1c3QgeCAtPiByZXR1cm4geAogICAgICAgICBOb3RoaW5nIC0+IHB1dFN0ckxuICJJbnZhbGlkIG51bWJlciBlbnRlcmVkIiA+PiBwcm9tcHREb3VibGUgdGV4dAoKc3FydEVxdWF0aW9uIDo6IERvdWJsZSAtPiBEb3VibGUgLT4gRG91YmxlIC0+IFNvbHV0aW9uCnNxcnRFcXVhdGlvbiBhIGIgYwogICAgfCBkIDwgMC4wID0gTm9Tb2x1dGlvbnMKICAgIHwgZCA9PSAwLjAgPSBPbmVTb2x1dGlvbiB4MQogICAgfCBkID4gMC4wID0gVHdvU291bHV0aW9ucyB4MSB4MgogICAgd2hlcmUgZCA9IGIqYiAtIDQqYSpjCiAgICAgICAgICB4MSA9IGYgYSBiIGQgKCspCiAgICAgICAgICB4MiA9IGYgYSBiIGQgKC0pCiAgICAgICAgICBmIGEgYiBkIG9wZXJhdG9yID0gKG9wZXJhdG9yICgtYikgc3FydCBkKS8yKmEKCm1haW4gOjogSU8gKCkKbWFpbiA9IGRvCiAgICAgICAgYSA8LSBwcm9tcHREb3VibGUgIklucHV0IGE6ICIKICAgICAgICBiIDwtIHByb21wdERvdWJsZSAiSW5wdXQgYjogIgogICAgICAgIGMgPC0gcHJvbXB0RG91YmxlICJJbnB1dCBjOiAiCiAgICAgICAgbGV0IHJlc3VsdCA9IHNob3cgKHNxcnRFcXVhdGlvbiBhIGIgYykKICAgICAgICBwdXRTdHJMbiByZXN1bHQK
compilation info
[1 of 1] Compiling Main ( prog.hs, prog.o )
prog.hs:24:24:
Couldn't match type `Double' with `a0 -> a0'
Expected type: Double -> (a0 -> a0) -> Double -> Double
Actual type: Double -> Double -> Double
In the fourth argument of `f', namely `(+)'
In the expression: f a b d (+)
prog.hs:25:24:
Couldn't match type `Double' with `a1 -> a1'
Expected type: Double -> (a1 -> a1) -> Double -> Double
Actual type: Double -> Double -> Double
In the fourth argument of `f', namely `(-)'
In the expression: f a b d (-)
stdout