-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A minimalistic but extensible and precise calculator -- -- Hascal is both a simple but extendable calculator library for Haskell -- as well as a command-line program using this library. -- -- Hascal supports addition, subtraction, multiplication, division, -- exponentiation, and logarithm, while it's easy to add custom -- operators. -- -- Hascal also supports complex numbers. Hascal can work at an arbitrary -- precision. However, Hascal does not support parenthesis. @package hascal @version 2.0.0 -- | Hascal is both a simple but extendable calculator library for Haskell -- and a command-line program using it. -- -- Also, its source code is a nice example for a minimalistic Haskell -- project. -- -- Some examples for the usage of the command-line program (using bash): -- --
--   >>> hascal 1+2
--   3.0
--   
-- --
--   >>> hascal 1+2*3-4/198^2
--   6.99989796959493929190898887868584838281807978777676
--   
-- -- Also, preceding exclamation marks mean that the following number is -- imaginary, that is, you have to multiply it with i. E.g.: -- --
--   >>> hascal _1 ^ 0.5
--   !1.0
--   
-- -- And as you can see, negative numbers are preceded by an underscore. -- -- Although hascal itself doesn't understand brackets, you can use your -- shell to get that functionality, like this (using bash): -- --
--   >>> hascal e ^ $(hascal i*pi)
--   -1.0
--   
-- -- Speaking of shells, you should consider that your shell might extend -- an asterisk (*) to the files at the current directory, like this: -- --
--   >>> echo *
--   _darcs dist hascal.cabal Hascal.hs LICENSE Main.hs README.org Setup.hs
--   
-- -- That's why this might not work: -- --
--   >>> hascal 1 * 2
--   Error. :(
--   
-- -- But you could do this instead: -- --
--   >>> hascal 1*2
--   2
--   
-- -- Or, you could do: -- --
--   >>> hascal '1*2'
--   2
--   
-- -- Yeah, that's pretty much it. Hascal is really minimalistic. And I'm -- not planning to extend it much. module Hascal -- | operators is the default list of operators. -- -- An operator consists of one character and a function. -- -- operators includes: -- -- -- -- such that these laws are held: -- --
--   (a - b == c) == (a == b + c)
--   (a / b == c) == (a == b * c)
--   (a ? b == c) == (a == b ^ c)
--   
operators :: RealFloat t => [(Char, Complex t -> Complex t -> Complex t)] -- | eval gets a list of operators and a string containing a -- mathematical expression/term which only uses those operators listed in -- the first argument, and returns the result of that term. eval :: (Read t, RealFloat t) => [(Char, Complex t -> Complex t -> Complex t)] -> String -> Either String (Complex t) -- | hascal is the default evaluator: -- --
--   hascal = eval operators
--   
hascal :: (Read t, RealFloat t) => String -> Either String (Complex t) -- | prettyPrint prints a number nicely. E.g., it doesn't show the -- real or imaginary part of the number if it's 0. prettyPrint :: (Show t, RealFloat t) => Complex t -> String