setOwner :: File -> User -> File
setOwner f o = f & ownerID .~ (o ^. User.uid)
How do I turn this into a Setter
?
I can't make it a lens because getUser :: UserID -> IO User
is an impure function.
I just realized my previous answer was wrong. Whoops!
Here you go:
ownerS :: Setter File File () User
ownerS = sets (\f file -> setOwner file (f ()))