Предлагаемые ScopedTypeVariables В шаблоне тип-подпись
Я начал писать код на Haskell. Я пытался написать функцию Фибоначчи, используя Guards -
fibo :: (Num z, Ord z) => z -> z
fibo d
| d <= 0 = 0
| d == 1 = 1
| otherwise = fibo (d-1) + fibo (d-2)
Я получил эту ошибку:-
Подпись недопустимого типа: '(Num z, Ord z) => z -> z fibo d' Возможно, вы намеревались использовать ScopedTypeVariables в шаблоне-подписи типа
Однако, другая функция - репликация, которую я написал аналогичным образом, скомпилирована и работает нормально. Я могу написать Фибоначчи по-другому, но я хочу знать, в чем была ошибка
1 ответ
Отступы в вашей программе неверны, и странное обращение со вкладками в Stackru сделало отступы в вашем вопросе неправильными по-другому.
Ваша программа должна иметь такой отступ:
fibo :: (Num z, Ord z) => z -> z fibo d | d <= 0 = 0 | ...
Первые две строки должны начинаться в одном и том же столбце, а строки с защитой должны быть более отступы, чем эти строки.
Программа, отображаемая в вашем вопросе, неверна по-другому, чем ошибка, о которой вы упоминали: строки с защитными символами должны иметь больше отступов, чем предыдущие. Это произошло из-за нестандартной обработки символов табуляции в Stackru. Не используйте вкладки.
Ваша ошибка согласуется с тем, что GHC рассматривает вашу программу как отступ:
fibo :: (Num z, Ord z) => z -> z fibo d -- wrong, must start in same column as previous line | d <= 0 = 0 | ...
Мы можем восстановить, что ваша оригинальная программа должна быть
<sp><sp><sp><sp>fibo :: (Num z, Ord z) => z -> z <tab> fibo d <tab> | d <= 0 = 0 <tab> | ...
Не используйте вкладки.