Haskellでbasename

ちょっと分かってきた気がするけど、まだまだ。でもMonadを少し使えるようになった。これぐらいだったらいいけど、もっと大きいものを作ろうとすると途端に手が止まってしまう。ムズい。

#!/usr/bin/runhugs

module Main where

import Maybe
import System (getArgs)
import List (elemIndex,last)

main :: IO ()
main = do { args <- getArgs
          ; let basename = last $ sep $ head args
            in putStrLn (basename :: String)
          }

sep :: String -> [String]
sep [] = []
sep s  = sep' (s) (elemIndex '/' s)

sep' :: String -> Maybe Int -> [String]
sep' s Nothing    = [s]
sep' s (Just idx) = if idx == 0 then sep $ tail s else [x] ++ sep y
    where
        (x,y) = splitAt idx s