<div dir="ltr"><div>I'm actually working in Purescript, but the issue is pretty much the same as one would encounter in Haskell.</div><div><br></div><div>My application (animation of math-related ideas) is changing constantly. It's research, and I don't know where I'll be with it next week, or even tomorrow.</div><div><br></div><div>For instance, the kinds of "objects" I'm animating (numbers, equations) and the way they move and interact with each other is a research project, and I'm constantly ripping out parts of my application and scavenging them for variations on a theme.</div><div><br></div><div>My objects need state. At this point I'm thinking of just putting the state into a map with strings as keys and some kind of sum type to represent each data item I might need.</div><div><br></div><div>So if I want to represent that an object has a particular color and position and velocity, <br></div><div><span style="font-family:monospace,monospace"><br></span></div><div><span style="font-family:monospace,monospace">itemState = M.fromList <br></span></div><div><span style="font-family:monospace,monospace">  [("color"   , DataColor  blue       )</span></div><div><span style="font-family:monospace,monospace">  ,("position", DataPoint  500.0 100.0)</span></div><div><span style="font-family:monospace,monospace">  ,("velocity", DataVector 50.0 45.0  ) ]</span></div><div><span style="font-family:monospace,monospace"><br></span></div><div><span style="font-family:arial,helvetica,sans-serif">Which starts to look more like a dynamically-typed scripting language. But it's not hard to work with. I can uses lenses/prisms to inspect and update state, and it's okay if my program crashes on encountering malformed state.</span></div><div><span style="font-family:arial,helvetica,sans-serif"><br></span></div><div><span style="font-family:arial,helvetica,sans-serif">What this lets me do is create new objects that mix and match parts of old objects, and copy and paste a lot of the code. <br></span></div><div><span style="font-family:arial,helvetica,sans-serif"><br></span></div><div><span style="font-family:arial,helvetica,sans-serif">Is there a better way to do this? Is there a compromise I can make that will allow the compiler to help me out more with finding errors at compile time?</span></div><div><span style="font-family:arial,helvetica,sans-serif"><br></span></div><div><span style="font-family:arial,helvetica,sans-serif">D<br></span></div><div><span style="font-family:arial,helvetica,sans-serif"><br></span></div><div><span style="font-family:monospace,monospace"><br></span></div><div><span style="font-family:monospace,monospace"><br></span></div><div><br></div><div><br></div></div>