[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