не так с линзами?:
                  
                  
                  
                  
                  
                  haskell
                  
                  
                  data App
                  
                  
                    = App
                  
                  
                    {
                  
                  
                    ...
                  
                  
                    , _gui         :: GUI
                  
                  
                    ...
                  
                  
                    } deriving Show
                  
                  
                  $(makeLenses ''App)
                  
                  
                  
                  
                  
                  data GUI
                  
                  
                    =  IntrGUI
                  
                  
                       {
                  
                  
                       ...
                  
                  
                       , _optsB    :: Widget
                  
                  
                       ...
                  
                  
                       }
                  
                  
                    | ...
                  
                  
                    deriving Show
                  
                  
                  $(makeLenses ''GUI)
                  
                  
                  
                  
                  
                  data Widget
                  
                  
                       ...
                  
                  
                    |  Button -- True when pressed, False when released
                  
                  
                       { 
                  
                  
                       ...
                  
                  
                       , _pressed :: Bool
                  
                  
                       ...
                  
                  
                       }
                  
                  
                  $(makeLenses ''Widget)
                  
                  
                  
                  
                  
                  -- works:
                  
                  
                  test   = _pressed $ _optsB $ app' ^. App.gui
                  
                  
                  
                  
                  
                  -- does not work: No isntance for (Monoid Bool) arising from use of 'optsB'
                  
                  
                  test   = app' ^. App.gui . optsB . pressed
                  
                  
                
Судя по палке внутри виджета, там нужна призма
это часть пакета lens?
Обсуждают сегодня