However, it is possible to argue this is just a bug in my brain from having spent too long staring at C code..
anyway, let’s move onto more substantitive complaints!
over quantity Lone Wolf $ increment Quantity import Control. I'd like something like fmap ( 1), but since Quantity is not an instance of Functor, I can't do that.
over quantity Team Player $ increment Quantity q3 = over quantities . iso from Just Just update World :: Fighter - there are 4 possible cases (Nonthing - Nothing, Just - Nothing, Nothing-Just and Just-Just). Problem is that partial application won't help since the function which gets applied is "in the middle" of arguments Get rid of increment Quantity.
Both Haskell and Purescript have a notion of "records," which are types that have a fixed set of named fields.
The two languages treat them very differently, each with some advantages and disadvantages.
So for example, you could define a type like You can use a record constructor either with named fields or with the arguments in order like a non-record constructor.
Lenses are a simple concept, but also very general.
Actually, declaring a record creates a named function which uses pattern matching to destroy a passed record and return the name.
So access actually looks like this: Which (when read left to right, as is natural) is entirely the wrong order of accessors.
There is also special syntax for updating a field of a record.
This ends up being mostly okay for the "named tuple" style types, but once you've been around Haskell for a while and define a type with multiple record constructors with different fields, you notice a glaring downside: One of the biggest benefits of using Haskell is that the type system often prevents you from running code that does nonsensical like trying to extract a field that doesn't exist.
It's no secret that doing records right is hard, and GHC is in the process of improving its record system.