[Haskell-i18n] Proposal for a Unicode-safe layout rule

Carl Witty cwitty@newtonlabs.com
04 Aug 2003 11:09:15 -0700


On Mon, 2003-08-04 at 02:16, Keith Wansbrough wrote:
> > If TAB is treated as layout-unsafe (as it should be) then this rule change
> > will break some existing code, but only code that deserves to be broken.
> > If TAB is treated specially as it currently is, this change should not
> > break any existing code.
> 
> Alternative: make the column value a partial order: identical white
> space is equal indent, additional white space increases the indent and
> less decreases it, but different white space is incomparable.  In
> other words, you can use whatever mix of spaces and tabs you like, as
> long as you use it consistently.  Eight spaces, four spaces, and one
> tab are all different, but if you always use one tab you're fine.
> Like this:
> 
> -- suggested whitespace partial order for layout
> 
> import Char
> import List
> 
> -- |Opaque indent value type
> data Indent = Indent String deriving Show
> 
> -- |Given a line, compute the indent of that line
> indentOf :: String -> Indent
> indentOf s = Indent (takeWhile isSpace s)
> 
> -- |Compare two indents (NB: partial order)
> cmpIndent :: Indent -> Indent -> Maybe Ordering
> cmpIndent (Indent s1) (Indent s2) | s1 == s2         = Just EQ
>                                   | isPrefixOf s1 s2 = Just LT
>                                   | isPrefixOf s2 s1 = Just GT
>                                   | otherwise        = Nothing
> 
> This way, it doesn't matter how wide any whitespace character is, or
> even what tab width you use.  The system doesn't even need to know -
> and any Unicode whitespace character can be used, not just the Latin-1
> "isSpace" ones.
> 
> Comments?

Would 

f x = let y = 1
 {- a -}  z = 2 in 3

be legal (I believe it is currently)?  What if that 'a' were a Unicode
character?

Carl Witty