Flint2-Examples-0.1.0.0: app/pi_digits/Main.hs
import System.TimeIt
import Foreign.Ptr (nullPtr)
import Foreign.C.Types
import Options.Applicative
import Control.Monad
import Data.Number.Flint.Arb
main = timeItNamed "time"
$ run =<< customExecParser (prefs showHelpOnEmpty) opts where
opts = info (parameters <**> helper) (
fullDesc
<> progDesc "Calculates digits of pi."
<> header "Calculates digits of pi.")
run (Parameters digits condense) = do
let prec = floor $ fromIntegral digits / logBase 10 2 + 5
flag = foldr (+) arb_str_none $
replicate condense arb_str_condense
putStrLn $ "computing pi with a precision of " ++ show prec ++ " bits ..."
withNewArb $ \x -> do
arb_const_pi x prec
arb_printn x (fromIntegral digits) flag
putStr "\n"
data Parameters = Parameters {
digits :: Int,
condense :: Int
} deriving Show
parameters :: Parser Parameters
parameters = Parameters
<$> argument auto (
help "number of digits to calculate." <>
metavar "digits")
<*> argument auto (
value 20 <>
help "condense" <>
showDefault <>
metavar "condense")