<div dir="ltr"><div dir="ltr"><div dir="ltr">Hello,<div><br></div><div>let's start the discussion on proposal #158.</div><div><br></div><div>After some discussion on the pull request the proposal was changed, so that instead of adding another method, it now proposes to remove the existing method `getField`, and add a new method `hasField`, which allows to both access and change the value of a field.  After the proposal the class would look like this</div><div><br></div><div>-- `x` is the name of the field, `r` is the type of the record, `a` is the type of the field</div><div><div>class HasField x r a | x r -> a where</div><div>  hasField :: r -> (a -> r, a)</div></div><div><br></div><div>In addition, we'd provide two functions `getField` and `setField` which are defined in terms of `hasField`.    The proposal may break existing code, if it defines manual instances of `HasField`, however, code that just uses the functionality will continue working as before.   `HasField` is relatively new, and there aren't many reasons to define custom instances of it, so it is expected that breaking code would not be a big issue.</div><div><br></div><div>This seems like a reasonably simple change, that adds new functionality, so I recommend that we accept the change.</div><div><br></div><div>-Iavor </div></div></div></div>