Hello Isaac, Thursday, January 17, 2008, 5:46:20 PM, you wrote:
> yep, there's the idea of putting Bools in a typeclass that allows you to > (||) functions-returning-Bool-class-instance for example, which I > haven't used much but seems like a good idea (though potentially > confusing, especially if the Prelude-Bool-specific names are reused) -- Datatypes having default values class Defaults a where defaultValue :: a instance Defaults () where defaultValue = () instance Defaults Bool where defaultValue = False instance Defaults [a] where defaultValue = [] instance Defaults (a->a) where defaultValue = id instance Defaults (Maybe a) where defaultValue = Nothing instance Defaults (a->IO a) where defaultValue = return instance Defaults a => Defaults (IO a) where defaultValue = return defaultValue instance Num a => Defaults a where defaultValue = 0 -- Datatypes that can be checked for default value class TestDefaultValue a where isDefaultValue :: a -> Bool instance TestDefaultValue Bool where isDefaultValue = not instance TestDefaultValue [a] where isDefaultValue = null instance Num a => TestDefaultValue a where isDefaultValue = (==0) infixr 3 &&& infixr 2 ||| a ||| b | isDefaultValue a = b | otherwise = a a &&& b | isDefaultValue a = defaultValue | otherwise = b my code contains countless examples of using these funcs: 1. here it is used to conditionally include options in cmdline: ["rar", "x", arcname]++ (isAddDir &&& ["-ad"])++ (arcdir &&& files &&& ["-ap"++arcdir])++... 2. here it is used to get list of files where current directory may be specified as "": files <- dirList (dirName ||| ".") 3. here it is used to show file basename or full path if basename is empty: putStr (takeBaseName file ||| file) 4. here it's used for conditional code execution: do opt_debug command &&& testMalloc ... 5. here it is used to additionally print amount of bad sectors if it's non-zero: putStrLn$ show recoverable_sectors++" recoverable errors "++ (bad_sectors &&& " and "++show bad_sectors++" bad sectors") 6. here it's used to create tempfile in current directory unless temporary directory was explicitly specified in --tempdir option let filename = (opt_tempdir command ||| ".") </> "$$temp$$" 7. here it is use to apply additional reorder step to sorted list only if --reorder option was specified sorted_diskfiles <- (opt_reorder command &&& reorder) (sort_files command diskfiles) (reorder has type [String] -> IO [String]) -- Best regards, Bulat mailto:[EMAIL PROTECTED] _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe