Я хочу использовать строковый литерал как Traversal, но я немного потерян в типах. Возможно ли создать этот экземпляр?Можно ли сделать Traversal экземпляром IsString
import Control.Lens
import Data.Aeson
import Data.Aeson.Lens
import Data.String
import Data.Default
{- Having:
key' :: AsValue t => Text -> Traversal' t (Maybe Value)
_JSON :: (ToJSON a, FromJSON a) => Traversal' t a
-}
instance (AsValue t, FromJSON v, ToJSON v, Default v) => IsString (Traversal' t v) where
fromString k = key' (fromString k) . non (toJSON def) . _JSON
Чтобы достичь чего-то вроде этого внутри государственного монады:
"some-key" .= (3 :: Int)
Проблема с экземплярами универсально количественными типа. Благодаря!
Этот пример также требует 'RankNTypes' говорить о синонимов типа объектива,' FlexibleInstances' для 'экземпляра IsString', либо' TypeFamilies' или '' GADTs' для ~ 'и' прячась ((. =)) 'при импорте' Data.Aeson'. – Cirdec