2012-06-21 3 views
2

Я уже обманывал с отступом, но это выглядит правильно для меня. Может ли кто-нибудь увидеть, где я ошибаюсь?«Возможно неправильное отступы» в заявлении дела Haskell

deposit :: NodeType -> NodeType -> Amount -> Node 
deposit (Income income) (Account bal grow) amount = 
    Account (bal + transfer) grow where transfer = case amount of 
    AbsoluteAmount amount -> min income amount -- This is line 34 
    RelativeAmount percent -> (min 1.0 percent) * income 

Сообщение об ошибке я получаю:

Prelude> :load BudgetFlow.hs 
[1 of 1] Compiling Main    (BudgetFlow.hs, interpreted) 

BudgetFlow.hs:34:5: parse error (possibly incorrect indentation) 
Failed, modules loaded: none. 

линии 34 (строка с ошибкой синтаксического анализа) является строка, которая начинается AbsoluteAmount (я пометил его с комментарием выше). Я попытался поставить оператор case на свою собственную строку и отстутнуть два случая полностью справа от ключевого слова of, но я все равно получаю такое же сообщение об ошибке. Большое спасибо за любую помощь!

ответ

4

Положить предложение where на свою собственную линию.

deposit :: NodeType -> NodeType -> Amount -> Node 
deposit (Income income) (Account bal grow) amount = Account (bal + transfer) grow 
    where 
     transfer = case amount of 
      AbsoluteAmount amount -> min income amount -- This is line 34 
      RelativeAmount percent -> (min 1.0 percent) * income 
+0

Это сделало. Спасибо! –

+2

Чтобы быть точным: блок, введенный 'case', должен быть более глубоким отступом, чем блок, введенный' where'. Любое изменение, которое удовлетворяет этим критериям, будет работать - 'where' не _required_, чтобы быть один на линии. –

Смежные вопросы