| ... | ... | @@ -157,7 +157,20 @@ f x = ... where | 
| 
 | 
 | 
open x would be allowed at the top level, in a let binding, or in a where binding.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## abstraction
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
  
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
It is often useful to limit the ability of users to fill in or access parts of a data type arbitrarily to maintain invariants, instituting the following rule would let you enforce that to some degree:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Positional notation for pattern matching and constructor creation for a constructor may not be used unless all of its field labels are in scope.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
This would insure that by not exporting a field label, it cannot be gotten around by using positional notation.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
this fix would also require the polymorphic setting ability mentioned above and would partially mitigate the need for [ReadonlyConstructors](readonly-constructors)
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 |