| 102 | | |
| | 102 | == abstraction == |
| | 103 | |
| | 104 | 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: |
| | 105 | |
| | 106 | * Positional notation for pattern matching and constructor creation for a constructor may not be used unless all of its field labels are in scope. |
| | 107 | |
| | 108 | This would insure that by not exporting a field label, it cannot be gotten around by using positional notation. |
| | 109 | |
| | 110 | this fix would also require the polymorphic setting ability mentioned above and would partially mitigate the need for ReadonlyConstructors |