3 ms·
I'm still a beginner at Idris, but here's my attempt at a "naive" wc: module Main wordCount : String -> IO () wordCount file = let lineCount = len
by chongli 7y ago
I'm still a beginner at Idris, but here's my attempt at a "naive" wc:
module Main
wordCount : String -> IO ()
wordCount file = let lineCount = length $ lines file
wordCount = length $ words file
charCount = length $ unpack file in
putStrLn $ "Lines: " ++ show lineCount
++ " words: " ++ show wordCount
++ " chars: " ++ show charCount
main : IO ()
main = do (_ :: filename :: []) <- getArgs | _ => putStrLn "Usage: ./wc filename"
(Right file) <- readFile filename | (Left err) => printLn err
wordCount file
It counts lines, words, and characters. It reports errors such as an incorrect number of arguments as well as any error where the file cannot be read. Here are the stats it reports on its own source code:
$ ./wc wc.idr
Lines: 14 words: 86 chars: 581
Hope that helps.
- zeptomu 7y agoWow, thanks for the response - that actually looks like Haskell and if its performance is not that abysmal (let's say slower than Python), that is pretty cool. This actually looks quite reasonable - usage string included, I like it. Hats off to you, I will try to compile it to a binary now and do some benchmarking.
- seanmcdirmid 7y agoIs it really fair to call this an implementation of wc if it is just using a built in function for each case?
- zeptomu 7y agoThese might be reasonable functions to implement in a standard library, so having them it makes sense to use them. I rather feared Idris does not have some IO abstraction (reading/writing) files at all. Maybe I am conflating languages and libraries here, but they often go hand in hand. My practicability expectations for languages implementing dependent types are pretty low.