Object'
                  
                  
                       {
                  
                  
                        ...
                  
                  
                        , _time        :: Double
                  
                  
                       } deriving Show
                  
                  
                  $(makeLenses ''Object')
                  
                  
                  который я пытаюсь использовать в следующем выражении:
                  
                  
                  let time'' = obj0 ^. base . Obj.time :: Double
                  
                  
                  на что получаю ошибку: No instance for (Monoid Double) arising from a use of ‘base’
                  
                  
                  Не подскажете что с этим делать?  (Я так понимаю надо определить инстанс Monoid Double, но непонятно почему, ведь там просто поле рекорда Double)
                  
                  
                
Попробуйте ^.. вместо ^.
а что такое base?
Нет, не надо моноидировать double. Надо попросить завернуть его в Maybe. Например взяв preview/^?
Был вчера "BBC News", а сегодня "Ищи своих..."
это меняет :: Double на :: [Double]
data Object = Empty {} -- a unit | Planet { _base :: Object' ...
тут видно, что base может быть, а может не быть. (^?) решает эту проблему с помощью Maybe, (^.) с помощью моноида, (^..) с помощью списка
Обсуждают сегодня