Search code examples
haskellhaskell-lenslenses

How do I turn this into a Setter?


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.


Solution

  • I just realized my previous answer was wrong. Whoops!

    Here you go:

    ownerS :: Setter File File () User
    ownerS = sets (\f file -> setOwner file (f ()))