metasepi / idiomaticca

Translate IDIOMATIC C into human-readable ATS
http://metasepi.org/
GNU Affero General Public License v3.0
3 stars 0 forks source link

Use microlens to access state #40

Closed master-q closed 5 years ago

master-q commented 5 years ago

Example:

{-# LANGUAGE TemplateHaskell #-}
import Lens.Micro
import Lens.Micro.Mtl
import Lens.Micro.TH
import Control.Monad.State

data Bird = Bird {
            _pos   :: (Double, Double)
          , _speed :: (Double, Double)
          } deriving Show

makeLenses ''Bird

move :: Bool -> State Bird ()
move pressed = do
    if pressed
        then speed._2 .= 10
        else speed._2 -= 0.1
    (speedX, speedY) <- use speed
    pos._1 += speedX
    pos._2 += speedY

main = do
    let bird = Bird {_pos = (0,0), _speed = (1,1)}
    print $ execState (move False) bird
master-q commented 5 years ago

Don't use Lens.