cookbook-3.0.1.1: Cookbook/Essential/IO.hs
{- |
Module : Cookbook.Essential.IO
Copyright : (c) 2014 by Nate Pisarski
License : BSD3
Maintainer : nathanpisarski@gmail.com
Stability : Stable
Portability : Non-Portable (Cookbook, Strict, Environment)
Library for completing common IO tasks, integrating with files and UNIX functions.
-}
module Cookbook.Essential.IO where
import qualified System.IO as LIO
import qualified System.IO.Strict as SIO
import qualified Cookbook.Essential.Common as Cm
import qualified Cookbook.Essential.Continuous as Ct
import System.Directory
-- | Return the lines of a file as a list of Strings.
filelines :: String -> IO [String]
filelines x = fmap lines $ LIO.openFile x LIO.ReadMode >>= SIO.hGetContents
-- | Prompts the user for keyboard input
prompt :: String -> IO String
prompt x = do
putStr x
LIO.hFlush LIO.stdout
getLine
-- | Returns the path of a file in the user's home directory.
inhome :: String -> LIO.IOMode -> IO LIO.Handle
inhome x c = fmap ((++x).(++"/")) getHomeDirectory >>= flip LIO.openFile c
-- | Pure. Returns the file name with the directory truncated.
filename :: String -> String
filename = Cm.fromLast (`Ct.before` '/')
-- | Pure. Returns the module name. That is, path to the file with the file cut off.
modulename :: String -> String
modulename = Cm.fromLast (`Ct.after` '/')