Я определил тип данных Tree в Haskell и связанный метод 'size', который вычисляет количество элементов в дереве. Это работало и раньше, однако я обновил тип данных Tree для использования именованных полей, как показано в следующем определении:
data Tree a = Empty
| Leaf {value::a}
| Node {left :: (Tree a), value :: a, right :: (Tree a)}
deriving (Eq, Ord, Show)
Я обнаружил (играя в GHCi), что я могу получить доступ к именованному полю, например, с помощью функции (слева n). Однако, когда я пытаюсь использовать эту функцию, я получаю сообщение об ошибке:
size :: Tree a -> Int
size Empty = 0
size (Leaf l) = 1
size (Node n) = size (left n) + 1 + size (right n)
GHCi просто говорит «Не в области: слева» и эквивалент для справа. Определение дерева находится в модуле, называемом деревом, а определение размера находится в модуле, называемом основным, но с неназванными полями у меня никогда не возникало проблем с областью видимости, когда речь шла о доступе к переменным из типа данных дерева.