David Fox wrote: > I try to create a workflow for this sort of thing. I create a package > with a name like set-extra, with one module Data.Set.Extra and an > alternative Data.Set module that exports both the old Data.Set and the > symbols in Data.Set.Extra. Then I email the maintainers of the > Containers package with a suggestion. After a while I upload > set-extra to hackage if I need to use set-extra in another hackage > package.
Thanks, that's the most helpful hint. It matches MissingH's use of .Utils modules too. Jean-Marie Gaillourdet wrote: > Personally, I've always been avoiding those grab-bags of functionality like > MissingH and other libraries. Not because I think they don't provide anything > useful. But, because their level of maintenance is not clear to me. A rather > large library of utility functions tends to need many dependencies on other > hackage packages. That makes the question of maintenance even more important. It's not clear to me either. I used MissingH starting out because I personally know and trust John and/or he cowrote RWH. Don't know that I would have otherwise. (And I only use Data.String.Utils, System.Cmd.Utils, and Data.Bits.Utils from it.) > As others have pointed out some of your functions may already exist in some > widely used package. And other might be easy to be replaced by some idiom. > Don't > underestimate the depth of Haskell and it's well thought libraries. I am > regularly amazed by finding some new way to combine seemingly trivial > functions > to do some non-trivial task. Every time that happens I can remove some of my > utility functions. Well, this is certianly true, on the other hand then you end up with a pattern of repeatedly combining some trivial functions in a certian way, and it then makes sense to formalize that. It's better to have `fromMaybe` than to repeatedly use `id` with `maybe`. Tristan Ravitch wrote: > > whenM :: Monad m => m Bool -> m () -> m () -- also >>? > > unlessM :: Monad m => m Bool -> m () -> m () -- also >>! > > firstM :: Monad m => (a -> m Bool) -> [a] -> m (Maybe a) > > IfElse > (http://hackage.haskell.org/packages/archive/IfElse/0.85/doc/html/Control-Monad-IfElse.html) > has a few of these. whenM is in a dozen packages, the others fewer but scattered here and there. I also found >>? and >>! somewhere on hackage once but not sure where. > > Various path manipulation functions such as: > > absPath :: FilePath -> IO FilePath > > Is this different from canonicalizePath in directory? Yes; it doesn't require the path to exist. > > Other stuff: > > > > separate :: (a -> Bool) -> [a] -> ([a], [a]) > > Is this partition from Data.List? No; it's like break but does not include the separating character in the snd list. > > format :: Format -> Variables -> String > > This looks like it might be similar to HStringTemplate This particular format allows for things like "${foo} ${bar;10} ${baz;-10}\n" so it's sort of printf like, but not entirely. > > withTempFile :: Template -> (FilePath -> Handle -> IO a) -> IO a > > temporary > (http://hackage.haskell.org/packages/archive/temporary/1.1.2.3/doc/html/System-IO-Temp.html) > has a few variants of this one Indeed, however all its functions can fail if getTemporaryDirectory fails; this one puts the temp file in "." in that case. Simon Hengel wrote: > > headMaybe :: [a] -> Maybe a > > Is this the same as Data.Maybe.maybeToList? Rather listToMaybe.. it is the same as that in fact. Though I also have a lastMaybe that does not have an equivilant in Data.Maybe. > > readMaybe :: Read a => String -> Maybe a > > This has been added to base recently [1]. Great! Although there are multiple ways to choose to implement this. I found it useful to make it succeed even if not all the string was consumed, or when there are multiple valid results. I've renamed mine readish. -- eee shy jo
signature.asc
Description: Digital signature
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe