[Haskell-cafe] short yet featureful grep

John Meacham john at repetae.net
Thu Apr 27 18:39:34 EDT 2006


my favorite example is the featureful yet short grep, supporting quite a
few non-trivial options as well as a detailed '--help' message. :)

this is a great example for anyone that says strong typing clutters code
:) Haskell can be much more concise as well as safer than perl given the
right libraries.


main = do
        (fs,(verb,c,e,o,q)) <- getOptions (
                "v|verbose" ?? "set verbose mode"
                "c" ?? "count occurances",
                "e" ==> "." ?? "the pattern to match",
                "o" ?? "show just the match rather than the line"'
                "q" ?? "just tell whether it matches"
                )
        when verb $ putStrLn ("reading " ++ show fs)
        ls <- fmap (lines . concat) $ mapM readFiles fs
        when q $ if any (=~ e) ls then exit 0 else exit 1
        when c $ print $ sum (map (fromEnum . (=~ e)) ls)
        flip mapM ls $ \l -> case (l =~ e) of
                Nothing -> return ()
                Just xs -> putStrLn $ if o then xs else l
                

        John

-- 
John Meacham - ⑆repetae.net⑆john⑈


More information about the Haskell-Cafe mailing list