import System.Environment import Text.Read import Foreign.C.Types import Data.Number.Flint main = do prog <- getProgName args <- getArgs case args of [arg0] -> do case (readMaybe arg0 :: Maybe CLong) of Just n -> run n _ -> putStrLn $ "usage: " ++ prog ++ " " _ -> putStrLn $ "usage: " ++ prog ++ " " run n = do s1 <- newFmpzMat n n s2 <- newFmpzMat n n withFmpzMat s1 $ \s1 -> arith_stirling_matrix_1 s1 withFmpzMat s2 $ \s2 -> arith_stirling_matrix_2 s2 let p = s1*s2 putStrLn "S1 [Stirling numbers of 1st kind]:" print s1 putStrLn "S2 [Stirling numbers of 2nd kind]:" print s2 putStrLn "S1 * S2:" print p