Flint2-Examples-0.1.0.0: app/delta_qexp/Main.hs
import Options.Applicative
import Control.Monad
import Control.Monad.State
import Foreign.C.Types
import Foreign.Ptr
import Data.Number.Flint
main = run =<< customExecParser (prefs showHelpOnEmpty) opts where
desc = "Compute nth coefficient of the q-expansion of the weight \
\12 cusp form."
opts = info (parameters <**> helper) (
fullDesc
<> progDesc desc
<> header desc)
run params@(Parameters n) = do
withNewFmpz $ \k -> do
fmpz_set_si k n
withNewFmpz $ \c -> do
arith_ramanujan_tau c k
putStr $ "Coefficient of q^" ++ show n ++ " is "
fmpz_print c
putStr "\n"
data Parameters = Parameters {
n :: CLong
} deriving Show
parameters :: Parser Parameters
parameters = Parameters
<$> argument pos (
help "positive integer n"
<> metavar "n")
pos :: (Read a, Integral a) => ReadM a
pos = eitherReader $ \s -> do
let result = read s
if result >= 0 then
Right result
else
Left "expected positive number"