HaskellでTreeデータ型を定義し、ツリー内の要素の数を計算する関連する「size」メソッドを定義しました。これは以前は機能していましたが、次の定義のように名前付きフィールドを使用するようにTreeデータ型を更新しました。
data Tree a = Empty
| Leaf {value::a}
| Node {left :: (Tree a), value :: a, right :: (Tree a)}
deriving (Eq, Ord, Show)
たとえば、関数(左n)を使用して、名前付きフィールドにアクセスできることがわかりました(GHCiで遊んでみました)。ただし、この関数を使用しようとすると、エラーが発生します。
size :: Tree a -> Int
size Empty = 0
size (Leaf l) = 1
size (Node n) = size (left n) + 1 + size (right n)
GHCiは単に「範囲外:左」と言い、右に相当します。Tree定義はTreeというモジュールにあり、サイズ定義はMainというモジュールにありますが、名前のないフィールドでは、Treeデータ型から変数にアクセスするときにスコープに問題が発生することはありませんでした。