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, (^.) с помощью моноида, (^..) с помощью списка
Обсуждают сегодня