49 lines
1.4 KiB
Haskell

module Main (main) where
import Interop.Shared (Summary (..))
import RustClient (callRustMessage, callRustSummary)
import System.Environment (getArgs)
import Text.Read (readMaybe)
main :: IO ()
main = do
args <- getArgs
let (name, left, right) = parseArgs args
summary <- callRustSummary left right
message <- callRustMessage name left right
putStrLn "Haskell -> Rust demo"
putStrLn $ "Inputs: name=" ++ name ++ ", left=" ++ show left ++ ", right=" ++ show right
putStrLn $ "Stats from Rust: " ++ renderSummary summary
putStrLn $ "Message from Rust: " ++ message
parseArgs :: [String] -> (String, Int, Int)
parseArgs args =
let name = case args of
value : _ -> value
[] -> "Ada"
left = maybe 7 id (pickNumber 1 args)
right = maybe 5 id (pickNumber 2 args)
in (name, left, right)
pickNumber :: Int -> [String] -> Maybe Int
pickNumber index values = do
value <- safeIndex index values
readMaybe value
safeIndex :: Int -> [a] -> Maybe a
safeIndex index values
| index < 0 = Nothing
| otherwise = case drop index values of
value : _ -> Just value
[] -> Nothing
renderSummary :: Summary -> String
renderSummary summary =
"total="
++ show (total summary)
++ ", product="
++ show (combinedProduct summary)
++ ", gap="
++ show (gap summary)