ActiveSupport::MultyByte car and cdr? Or 'head' and 'rest'


I'm working on an application which involves looking at words that have macrons ( that's the "long sound" bar over a letter ). Under certain spellings the macrons move from macron-ized to 'no macron'.

I tried to do this in Ruby without any help, but ultimately friends and saner voices convinced me that given Ruby's current state with respect to UTF-8 i would be saved many sleepless nights by including ActiveSupport::Multibyte.

And boy did it help! Yay!

Nevertheless, as I've written modules to deal with the aString.chars[x..y] to retrieve characters ( versus simple bytes ( which may or may not completely map to a character! )), I've found myself writing simple recursive functions whose work would have been made more simple by:

macronizedString.firstChar ( or the 'car' if you Lisp )

macronizedString.restOfString ( or the 'cdr' if you Lisp ).



Is there a reason these are not included? I don't mean "hey get off your butts and write these for me" , I mean it more in the sense of "am I so dumb that I'm not using the true power of the module to do things the easy way - versus writing painful functions".

For example 'lastChar' works along the lines of

firstChar = macronizedString.chars[0]

lastChar = macronizedString.chars[0..macronizedString.jlength-1]

restOfString = macronizedString.chars[1..99] # assuming string < 99 chars, probably not safe, surely there's a better way?

Thanks to Ruby's slick "extend class" I was thinking about adding these methods I doing a good thing or a foolish thing? Am I doing it in a sapient or foolish manner?