[Haskell-cafe] Re: Allowing hyphens in identifiers
Daniel Fischer
daniel.is.fischer at web.de
Wed Dec 16 09:55:18 EST 2009
Am Mittwoch 16 Dezember 2009 15:12:31 schrieb Colin Paul Adams:
> I tried it.
> I'm not all that happy with the resulting uncameling.
>
> For instance,
>
> Database.HaskellDB.Sql.PostgreSQL
>
> goes to
>
> Database.Haskell_dB.Sql.Postgre_sQL
>
> which is uglier than before.
Oy. Didn't think of that. If you can live with
Database.Haskell_DB.Sql.Postgre_SQL
the fix is easy:
unCamel :: String -> String
unCamel ('<':cs) = '<' : inTag cs
unCamel (a:b:c:cs)
| isLower a && isUpper b && isUpper c = a : '_' : b : c : unCamel cs
unCamel (a:bs@(b:cs))
| isLower a && isUpper b = a : '_' : toLower b : unCamel cs
| otherwise = a : unCamel bs
unCamel cs = cs
Another point is, what about things like
Data.Bits.shiftL
would that be preferred as
shiftL
shift_L
shift_l
?
Generally, when shall we flatten the hump,
1) always -- not
2) unless followed by an uppercase letter
3) when followed by a lowercase letter
I think, 3) is better than 2), things like for_m_ or map_m_ don't look right to me.
All of them are easy to implement, the question is what to implement.
What about
feedO'Houlihan?
IMO, it should clearly go to feed_O'Houlihan
So, perhaps
unCamel :: String -> String
unCamel ('<':cs) = '<' : inTag cs
unCamel (a:b:c:cs)
| isLower a && isUpper b && isLower c = a : '_' : toLower b : c : unCamel cs
unCamel (a:bs@(b:cs))
| isLower a && isUpper b = a : '_' : b : unCamel cs
| otherwise = a : unCamel bs
unCamel cs = cs
(gives Database.Haskell_DB.Sql.Postgre_SQL, shift_L, for_M_ [that's not optimal, any ideas
what to make of that?], feed_O'Houlihan).
Please test, report shortcomings.
>
> I.m not sure how I would write this going the other way, using
> Richard's hspp pre-processor.
>
> I'd want to write Database.Haskell_DB.Sql.Postgresql, but I'd guess
That would become really complicated. I'm afraid if you want that, you'll have to do it
yourself.
> I'd have to write it as Database.Haskell_DB.Sql.Postgre_s_q_l or just
> Database.Haskell_DB.Sql.PostgreSQL :-(
>
> Anyway, I'm having trouble with using Richard hspp. It changes ok_url
> to okUrl, but in fact the function concerned is named ok_url in
> Network.URL, so the pre-processor would have to be applied as part of
> cabal install for all packages.
Oh, great. There we have a preprocessor's nightmare, a package using both styles.
Let us think what to do with such things.
>
> I don't think it's practical to edit all the .cabal packages as they
> come in to say:
>
> ghc-options: -F -pgmF hspp
>
> and cabal install does not recognize this line if I add to to my
> ~/.cabal/config file.
>
> Duncan, is there a way this can be done?
More information about the Haskell-Cafe
mailing list