fay 0.24.0.2 → 0.24.0.3
raw patch · 6 files changed
+13/−9 lines, 6 filesdep ~basedep ~containersPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base, containers
API changes (from Hackage documentation)
+ Fay.Compiler.Prelude: infixl 1 >>
+ Fay.Compiler.Prelude: infixl 6 -
+ Fay.Compiler.Prelude: infixl 7 *
+ Fay.Compiler.Prelude: infixr 6 <>
- Fay.Compiler.Prelude: ($!) :: () => a -> b -> a -> b
+ Fay.Compiler.Prelude: ($!) :: () => (a -> b) -> a -> b
- Fay.Compiler.Prelude: ($) :: () => a -> b -> a -> b
+ Fay.Compiler.Prelude: ($) :: () => (a -> b) -> a -> b
- Fay.Compiler.Prelude: (+++) :: ArrowChoice a => a b c -> a b' c' -> a Either b b' Either c c'
+ Fay.Compiler.Prelude: (+++) :: ArrowChoice a => a b c -> a b' c' -> a (Either b b') (Either c c')
- Fay.Compiler.Prelude: (.) :: () => b -> c -> a -> b -> a -> c
+ Fay.Compiler.Prelude: (.) :: () => (b -> c) -> (a -> b) -> a -> c
- Fay.Compiler.Prelude: (<$!>) :: Monad m => a -> b -> m a -> m b
+ Fay.Compiler.Prelude: (<$!>) :: Monad m => (a -> b) -> m a -> m b
- Fay.Compiler.Prelude: (<$>) :: Functor f => a -> b -> f a -> f b
+ Fay.Compiler.Prelude: (<$>) :: Functor f => (a -> b) -> f a -> f b
- Fay.Compiler.Prelude: (<*>) :: Applicative f => f a -> b -> f a -> f b
+ Fay.Compiler.Prelude: (<*>) :: Applicative f => f (a -> b) -> f a -> f b
- Fay.Compiler.Prelude: (<=<) :: Monad m => b -> m c -> a -> m b -> a -> m c
+ Fay.Compiler.Prelude: (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c
- Fay.Compiler.Prelude: (=<<) :: Monad m => a -> m b -> m a -> m b
+ Fay.Compiler.Prelude: (=<<) :: Monad m => (a -> m b) -> m a -> m b
- Fay.Compiler.Prelude: (>=>) :: Monad m => a -> m b -> b -> m c -> a -> m c
+ Fay.Compiler.Prelude: (>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c
- Fay.Compiler.Prelude: (>>=) :: Monad m => m a -> a -> m b -> m b
+ Fay.Compiler.Prelude: (>>=) :: Monad m => m a -> (a -> m b) -> m b
- Fay.Compiler.Prelude: (|||) :: ArrowChoice a => a b d -> a c d -> a Either b c d
+ Fay.Compiler.Prelude: (|||) :: ArrowChoice a => a b d -> a c d -> a (Either b c) d
- Fay.Compiler.Prelude: all :: Foldable t => a -> Bool -> t a -> Bool
+ Fay.Compiler.Prelude: all :: Foldable t => (a -> Bool) -> t a -> Bool
- Fay.Compiler.Prelude: any :: Foldable t => a -> Bool -> t a -> Bool
+ Fay.Compiler.Prelude: any :: Foldable t => (a -> Bool) -> t a -> Bool
- Fay.Compiler.Prelude: ap :: Monad m => m a -> b -> m a -> m b
+ Fay.Compiler.Prelude: ap :: Monad m => m (a -> b) -> m a -> m b
- Fay.Compiler.Prelude: break :: () => a -> Bool -> [a] -> ([a], [a])
+ Fay.Compiler.Prelude: break :: () => (a -> Bool) -> [a] -> ([a], [a])
- Fay.Compiler.Prelude: class Functor f => Applicative (f :: * -> *)
+ Fay.Compiler.Prelude: class Functor f => Applicative (f :: Type -> Type)
- Fay.Compiler.Prelude: class Foldable (t :: * -> *)
+ Fay.Compiler.Prelude: class Foldable (t :: Type -> Type)
- Fay.Compiler.Prelude: class Functor (f :: * -> *)
+ Fay.Compiler.Prelude: class Functor (f :: Type -> Type)
- Fay.Compiler.Prelude: class Applicative m => Monad (m :: * -> *)
+ Fay.Compiler.Prelude: class Applicative m => Monad (m :: Type -> Type)
- Fay.Compiler.Prelude: class (Alternative m, Monad m) => MonadPlus (m :: * -> *)
+ Fay.Compiler.Prelude: class (Alternative m, Monad m) => MonadPlus (m :: Type -> Type)
- Fay.Compiler.Prelude: class (Functor t, Foldable t) => Traversable (t :: * -> *)
+ Fay.Compiler.Prelude: class (Functor t, Foldable t) => Traversable (t :: Type -> Type)
- Fay.Compiler.Prelude: concatMap :: Foldable t => a -> [b] -> t a -> [b]
+ Fay.Compiler.Prelude: concatMap :: Foldable t => (a -> [b]) -> t a -> [b]
- Fay.Compiler.Prelude: curry :: () => (a, b) -> c -> a -> b -> c
+ Fay.Compiler.Prelude: curry :: () => ((a, b) -> c) -> a -> b -> c
- Fay.Compiler.Prelude: dataCast1 :: (Data a, Typeable t) => forall d. Data d => c t d -> Maybe c a
+ Fay.Compiler.Prelude: dataCast1 :: (Data a, Typeable t) => (forall d. Data d => c (t d)) -> Maybe (c a)
- Fay.Compiler.Prelude: dataCast2 :: (Data a, Typeable t) => forall d e. (Data d, Data e) => c t d e -> Maybe c a
+ Fay.Compiler.Prelude: dataCast2 :: (Data a, Typeable t) => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a)
- Fay.Compiler.Prelude: dropWhile :: () => a -> Bool -> [a] -> [a]
+ Fay.Compiler.Prelude: dropWhile :: () => (a -> Bool) -> [a] -> [a]
- Fay.Compiler.Prelude: either :: () => a -> c -> b -> c -> Either a b -> c
+ Fay.Compiler.Prelude: either :: () => (a -> c) -> (b -> c) -> Either a b -> c
- Fay.Compiler.Prelude: filter :: () => a -> Bool -> [a] -> [a]
+ Fay.Compiler.Prelude: filter :: () => (a -> Bool) -> [a] -> [a]
- Fay.Compiler.Prelude: filterM :: Applicative m => a -> m Bool -> [a] -> m [a]
+ Fay.Compiler.Prelude: filterM :: Applicative m => (a -> m Bool) -> [a] -> m [a]
- Fay.Compiler.Prelude: flip :: () => a -> b -> c -> b -> a -> c
+ Fay.Compiler.Prelude: flip :: () => (a -> b -> c) -> b -> a -> c
- Fay.Compiler.Prelude: fmap :: Functor f => a -> b -> f a -> f b
+ Fay.Compiler.Prelude: fmap :: Functor f => (a -> b) -> f a -> f b
- Fay.Compiler.Prelude: foldM :: (Foldable t, Monad m) => b -> a -> m b -> b -> t a -> m b
+ Fay.Compiler.Prelude: foldM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b
- Fay.Compiler.Prelude: foldM_ :: (Foldable t, Monad m) => b -> a -> m b -> b -> t a -> m ()
+ Fay.Compiler.Prelude: foldM_ :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m ()
- Fay.Compiler.Prelude: foldMap :: (Foldable t, Monoid m) => a -> m -> t a -> m
+ Fay.Compiler.Prelude: foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
- Fay.Compiler.Prelude: foldl :: Foldable t => b -> a -> b -> b -> t a -> b
+ Fay.Compiler.Prelude: foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
- Fay.Compiler.Prelude: foldl1 :: Foldable t => a -> a -> a -> t a -> a
+ Fay.Compiler.Prelude: foldl1 :: Foldable t => (a -> a -> a) -> t a -> a
- Fay.Compiler.Prelude: foldr :: Foldable t => a -> b -> b -> b -> t a -> b
+ Fay.Compiler.Prelude: foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
- Fay.Compiler.Prelude: foldr1 :: Foldable t => a -> a -> a -> t a -> a
+ Fay.Compiler.Prelude: foldr1 :: Foldable t => (a -> a -> a) -> t a -> a
- Fay.Compiler.Prelude: forM :: (Traversable t, Monad m) => t a -> a -> m b -> m t b
+ Fay.Compiler.Prelude: forM :: (Traversable t, Monad m) => t a -> (a -> m b) -> m (t b)
- Fay.Compiler.Prelude: forM_ :: (Foldable t, Monad m) => t a -> a -> m b -> m ()
+ Fay.Compiler.Prelude: forM_ :: (Foldable t, Monad m) => t a -> (a -> m b) -> m ()
- Fay.Compiler.Prelude: gfoldl :: Data a => forall d b. Data d => c d -> b -> d -> c b -> forall g. () => g -> c g -> a -> c a
+ Fay.Compiler.Prelude: gfoldl :: Data a => (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. () => g -> c g) -> a -> c a
- Fay.Compiler.Prelude: gmapM :: (Data a, Monad m) => forall d. Data d => d -> m d -> a -> m a
+ Fay.Compiler.Prelude: gmapM :: (Data a, Monad m) => (forall d. Data d => d -> m d) -> a -> m a
- Fay.Compiler.Prelude: gmapMo :: (Data a, MonadPlus m) => forall d. Data d => d -> m d -> a -> m a
+ Fay.Compiler.Prelude: gmapMo :: (Data a, MonadPlus m) => (forall d. Data d => d -> m d) -> a -> m a
- Fay.Compiler.Prelude: gmapMp :: (Data a, MonadPlus m) => forall d. Data d => d -> m d -> a -> m a
+ Fay.Compiler.Prelude: gmapMp :: (Data a, MonadPlus m) => (forall d. Data d => d -> m d) -> a -> m a
- Fay.Compiler.Prelude: gmapQ :: Data a => forall d. Data d => d -> u -> a -> [u]
+ Fay.Compiler.Prelude: gmapQ :: Data a => (forall d. Data d => d -> u) -> a -> [u]
- Fay.Compiler.Prelude: gmapQi :: Data a => Int -> forall d. Data d => d -> u -> a -> u
+ Fay.Compiler.Prelude: gmapQi :: Data a => Int -> (forall d. Data d => d -> u) -> a -> u
- Fay.Compiler.Prelude: gmapQl :: Data a => r -> r' -> r -> r -> forall d. Data d => d -> r' -> a -> r
+ Fay.Compiler.Prelude: gmapQl :: Data a => (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r
- Fay.Compiler.Prelude: gmapQr :: Data a => r' -> r -> r -> r -> forall d. Data d => d -> r' -> a -> r
+ Fay.Compiler.Prelude: gmapQr :: Data a => (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r
- Fay.Compiler.Prelude: gmapT :: Data a => forall b. Data b => b -> b -> a -> a
+ Fay.Compiler.Prelude: gmapT :: Data a => (forall b. Data b => b -> b) -> a -> a
- Fay.Compiler.Prelude: gunfold :: Data a => forall b r. Data b => c b -> r -> c r -> forall r. () => r -> c r -> Constr -> c a
+ Fay.Compiler.Prelude: gunfold :: Data a => (forall b r. Data b => c (b -> r) -> c r) -> (forall r. () => r -> c r) -> Constr -> c a
- Fay.Compiler.Prelude: infixr 0 $
+ Fay.Compiler.Prelude: infixr 0 $!
- Fay.Compiler.Prelude: interact :: String -> String -> IO ()
+ Fay.Compiler.Prelude: interact :: (String -> String) -> IO ()
- Fay.Compiler.Prelude: iterate :: () => a -> a -> a -> [a]
+ Fay.Compiler.Prelude: iterate :: () => (a -> a) -> a -> [a]
- Fay.Compiler.Prelude: join :: Monad m => m m a -> m a
+ Fay.Compiler.Prelude: join :: Monad m => m (m a) -> m a
- Fay.Compiler.Prelude: liftM :: Monad m => a1 -> r -> m a1 -> m r
+ Fay.Compiler.Prelude: liftM :: Monad m => (a1 -> r) -> m a1 -> m r
- Fay.Compiler.Prelude: liftM2 :: Monad m => a1 -> a2 -> r -> m a1 -> m a2 -> m r
+ Fay.Compiler.Prelude: liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
- Fay.Compiler.Prelude: liftM3 :: Monad m => a1 -> a2 -> a3 -> r -> m a1 -> m a2 -> m a3 -> m r
+ Fay.Compiler.Prelude: liftM3 :: Monad m => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
- Fay.Compiler.Prelude: liftM4 :: Monad m => a1 -> a2 -> a3 -> a4 -> r -> m a1 -> m a2 -> m a3 -> m a4 -> m r
+ Fay.Compiler.Prelude: liftM4 :: Monad m => (a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r
- Fay.Compiler.Prelude: liftM5 :: Monad m => a1 -> a2 -> a3 -> a4 -> a5 -> r -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r
+ Fay.Compiler.Prelude: liftM5 :: Monad m => (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r
- Fay.Compiler.Prelude: map :: () => a -> b -> [a] -> [b]
+ Fay.Compiler.Prelude: map :: () => (a -> b) -> [a] -> [b]
- Fay.Compiler.Prelude: mapAndUnzipM :: Applicative m => a -> m (b, c) -> [a] -> m ([b], [c])
+ Fay.Compiler.Prelude: mapAndUnzipM :: Applicative m => (a -> m (b, c)) -> [a] -> m ([b], [c])
- Fay.Compiler.Prelude: mapM :: (Traversable t, Monad m) => a -> m b -> t a -> m t b
+ Fay.Compiler.Prelude: mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)
- Fay.Compiler.Prelude: mapM_ :: (Foldable t, Monad m) => a -> m b -> t a -> m ()
+ Fay.Compiler.Prelude: mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m ()
- Fay.Compiler.Prelude: maybe :: () => b -> a -> b -> Maybe a -> b
+ Fay.Compiler.Prelude: maybe :: () => b -> (a -> b) -> Maybe a -> b
- Fay.Compiler.Prelude: mfilter :: MonadPlus m => a -> Bool -> m a -> m a
+ Fay.Compiler.Prelude: mfilter :: MonadPlus m => (a -> Bool) -> m a -> m a
- Fay.Compiler.Prelude: msum :: (Foldable t, MonadPlus m) => t m a -> m a
+ Fay.Compiler.Prelude: msum :: (Foldable t, MonadPlus m) => t (m a) -> m a
- Fay.Compiler.Prelude: on :: () => b -> b -> c -> a -> b -> a -> a -> c
+ Fay.Compiler.Prelude: on :: () => (b -> b -> c) -> (a -> b) -> a -> a -> c
- Fay.Compiler.Prelude: scanl :: () => b -> a -> b -> b -> [a] -> [b]
+ Fay.Compiler.Prelude: scanl :: () => (b -> a -> b) -> b -> [a] -> [b]
- Fay.Compiler.Prelude: scanl1 :: () => a -> a -> a -> [a] -> [a]
+ Fay.Compiler.Prelude: scanl1 :: () => (a -> a -> a) -> [a] -> [a]
- Fay.Compiler.Prelude: scanr :: () => a -> b -> b -> b -> [a] -> [b]
+ Fay.Compiler.Prelude: scanr :: () => (a -> b -> b) -> b -> [a] -> [b]
- Fay.Compiler.Prelude: scanr1 :: () => a -> a -> a -> [a] -> [a]
+ Fay.Compiler.Prelude: scanr1 :: () => (a -> a -> a) -> [a] -> [a]
- Fay.Compiler.Prelude: sequence :: (Traversable t, Monad m) => t m a -> m t a
+ Fay.Compiler.Prelude: sequence :: (Traversable t, Monad m) => t (m a) -> m (t a)
- Fay.Compiler.Prelude: sequenceA :: (Traversable t, Applicative f) => t f a -> f t a
+ Fay.Compiler.Prelude: sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)
- Fay.Compiler.Prelude: sequence_ :: (Foldable t, Monad m) => t m a -> m ()
+ Fay.Compiler.Prelude: sequence_ :: (Foldable t, Monad m) => t (m a) -> m ()
- Fay.Compiler.Prelude: span :: () => a -> Bool -> [a] -> ([a], [a])
+ Fay.Compiler.Prelude: span :: () => (a -> Bool) -> [a] -> ([a], [a])
- Fay.Compiler.Prelude: takeWhile :: () => a -> Bool -> [a] -> [a]
+ Fay.Compiler.Prelude: takeWhile :: () => (a -> Bool) -> [a] -> [a]
- Fay.Compiler.Prelude: traverse :: (Traversable t, Applicative f) => a -> f b -> t a -> f t b
+ Fay.Compiler.Prelude: traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
- Fay.Compiler.Prelude: uncurry :: () => a -> b -> c -> (a, b) -> c
+ Fay.Compiler.Prelude: uncurry :: () => (a -> b -> c) -> (a, b) -> c
- Fay.Compiler.Prelude: until :: () => a -> Bool -> a -> a -> a -> a
+ Fay.Compiler.Prelude: until :: () => (a -> Bool) -> (a -> a) -> a -> a
- Fay.Compiler.Prelude: zipWith :: () => a -> b -> c -> [a] -> [b] -> [c]
+ Fay.Compiler.Prelude: zipWith :: () => (a -> b -> c) -> [a] -> [b] -> [c]
- Fay.Compiler.Prelude: zipWith3 :: () => a -> b -> c -> d -> [a] -> [b] -> [c] -> [d]
+ Fay.Compiler.Prelude: zipWith3 :: () => (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
- Fay.Compiler.Prelude: zipWithM :: Applicative m => a -> b -> m c -> [a] -> [b] -> m [c]
+ Fay.Compiler.Prelude: zipWithM :: Applicative m => (a -> b -> m c) -> [a] -> [b] -> m [c]
- Fay.Compiler.Prelude: zipWithM_ :: Applicative m => a -> b -> m c -> [a] -> [b] -> m ()
+ Fay.Compiler.Prelude: zipWithM_ :: Applicative m => (a -> b -> m c) -> [a] -> [b] -> m ()
- Fay.Types: CompileReader :: Config -> Sign -> Literal -> Compile JsExp -> Bool -> [Decl] -> Compile [JsStmt] -> CompileReader
+ Fay.Types: CompileReader :: Config -> (Sign -> Literal -> Compile JsExp) -> (Bool -> [Decl] -> Compile [JsStmt]) -> CompileReader
- Fay.Types: JsFun :: (Maybe JsName) -> [JsName] -> [JsStmt] -> (Maybe JsExp) -> JsExp
+ Fay.Types: JsFun :: Maybe JsName -> [JsName] -> [JsStmt] -> Maybe JsExp -> JsExp
- Fay.Types: JsSetQName :: (Maybe SrcSpan) -> QName -> JsExp -> JsStmt
+ Fay.Types: JsSetQName :: Maybe SrcSpan -> QName -> JsExp -> JsStmt
Files
- CHANGELOG.md +4/−0
- fay.cabal +3/−3
- src/Fay/Compiler.hs +1/−1
- src/Fay/Compiler/Import.hs +1/−1
- src/Fay/Compiler/InitialPass.hs +1/−1
- src/Fay/Convert.hs +3/−3
CHANGELOG.md view
@@ -2,6 +2,10 @@ See full history at: <https://github.com/faylang/fay/commits> +#### 0.24.0.3 (2019-04-29)++* Dependency updates including GHC-8.6 support.+ #### 0.24.0.2 * Fix dependent compilation fail when building project with stack (#457).
fay.cabal view
@@ -1,5 +1,5 @@ name: fay-version: 0.24.0.2+version: 0.24.0.3 synopsis: A compiler for Fay, a Haskell subset that compiles to JavaScript. description: Fay is a proper subset of Haskell which is type-checked with GHC, and compiled to JavaScript. It is lazy, pure, has a Fay monad,@@ -139,11 +139,11 @@ Language.Haskell.Names.Types Paths_fay build-depends:- base >= 4.9 && < 4.12+ base >= 4.9 && < 4.13 , base-compat >= 0.10 && < 0.11 , aeson > 0.6 && < 1.5 , bytestring >= 0.9 && < 0.11- , containers >= 0.4 && < 0.6+ , containers >= 0.4 && < 0.7 , data-default >= 0.2 && < 0.8 , data-lens-light == 0.1.* , directory >= 1.1 && < 1.4
src/Fay/Compiler.hs view
@@ -121,7 +121,7 @@ -- | Compile a parse HSE module. compileModuleFromAST :: ([JsStmt], [JsStmt]) -> F.Module -> Compile ([JsStmt], [JsStmt]) compileModuleFromAST (hstmts0, fstmts0) mod'@Module{} = do- mod@(Module _ _ pragmas _ decls) <- annotateModule Haskell2010 defaultExtensions mod'+ ~mod@(Module _ _ pragmas _ decls) <- annotateModule Haskell2010 defaultExtensions mod' let modName = unAnn $ F.moduleName mod modify $ \s -> s { stateUseFromString = hasLanguagePragmas ["OverloadedStrings", "RebindableSyntax"] pragmas }
src/Fay/Compiler/Import.hs view
@@ -50,7 +50,7 @@ st (parseResult (throwError . uncurry ParseError) (\mod' -> do- mod@(Module _ _ _ imports _) <-+ ~mod@(Module _ _ _ imports _) <- either throwError return =<< io (before F.noI mod') res <- foldr (<>) mempty <$> mapM (compileImport compileModule) imports modify $ \s -> s { stateModuleName = unAnn $ F.moduleName mod }
src/Fay/Compiler/InitialPass.hs view
@@ -51,7 +51,7 @@ preprocessAST :: () -> F.Module -> Compile () preprocessAST () mod@(Module _ _ _ _ decls) = do -- This can only return one element since we only compile one module.- ([exports],_) <- HN.getInterfaces Haskell2010 defaultExtensions [mod]+ ~([exports],_) <- HN.getInterfaces Haskell2010 defaultExtensions [mod] modify $ \s -> s { stateInterfaces = M.insert (stateModuleName s) exports $ stateInterfaces s } forM_ decls scanTypeSigs forM_ decls scanRecordDecls
src/Fay/Convert.hs view
@@ -139,7 +139,7 @@ parseTuple :: Data a => GenericParser -> DataType -> Vector Value -> Either String a parseTuple rec typ arr = case dataTypeConstrs typ of- [cons] -> evalStateT (fromConstrM (do i:next <- get+ [cons] -> evalStateT (fromConstrM (do ~(i:next) <- get put next value <- lift (Vector.indexM arr i) lift (rec value))@@ -164,7 +164,7 @@ -- | Make a simple ADT constructor from an object: { "slot1": 1, "slot2": 2} -> Foo 1 2 makeSimple :: Data a => GenericParser -> HashMap Text Value -> Constr -> Either String a makeSimple rec obj cons =- evalStateT (fromConstrM (do i:next <- get+ evalStateT (fromConstrM (do ~(i:next) <- get put next value <- lift (lookupField obj (Text.pack ("slot" ++ show i))) lift (rec value))@@ -176,7 +176,7 @@ makeRecord rec obj cons = evalStateT $ fromConstrM- (do key:next <- get+ (do ~(key:next) <- get put next value <- lift (lookupField obj (Text.pack key)) lift $ rec value)