Идентификаторы не являются строками. (Это ни в коем случае не является особенным для Haskell, то же самое в большинстве других языков.) Поэтому, когда вы задаете aa
в качестве аргумента, GHC интерпретирует его как имя некоторой переменной . Но, ну, нет никакой переменной с этим именем, по крайней мере, не в области видимости, поэтому ошибка.
Если вы хотите передать строку, состоящую из двух a
символов ,тогда вы должны использовать строку литерал . Строковый литерал - это просто строка в двойных кавычках (опять-таки, так же, как и во многих других языках программирования).
*Main> validLength "aa"
False