Ticket #19 (new defect)

Opened 4 years ago

indentation of if..then..else in do block is broken

Reported by: anonymous Owned by: Baughn
Priority: major Component: other
Version: Keywords:


I was working through the Yet Another Haskell Tutorial, and I noticed that the haskell-mode indentation for one of their examples forces me into making a syntax error.

The code in question is seen on this page http://en.wikibooks.org/wiki/Haskell/YAHT/Language_basics (search for Guess.hs). I will reproduce it here, with its original indentation:

module Main

import IO
import Random

main = do
  hSetBuffering stdin LineBuffering
  num <- randomRIO (1::Int, 100)
  putStrLn "I'm thinking of a number between 1 and 100"
  doGuessing num

doGuessing num = do
  putStrLn "Enter your guess:"
  guess <- getLine
  let guessNum = read guess
  if guessNum < num
    then do putStrLn "Too low!"
            doGuessing num
    else if guessNum > num
           then do putStrLn "Too high!"
                   doGuessing num
           else do putStrLn "You Win!"

haskell-mode is of the opinion that the 'sole indentation' for the "then" following the "if" in doGuessing is aligned with the "if". However, this indentation results in a syntax error.

Note: See TracTickets for help on using tickets.