@@ -27,13 +27,16 @@ import Foreword hiding (mod)
27
27
import Control.Monad.Fresh (MonadFresh )
28
28
import Data.Aeson (Value )
29
29
import Data.Bifunctor.Swap qualified as Swap
30
+ import Data.Bitraversable (bisequence )
31
+ import Data.Functor.Compose (Compose (.. ))
30
32
import Data.Generics.Product (typed )
31
33
import Data.List (findIndex )
32
34
import Data.List.NonEmpty qualified as NE
33
35
import Data.Map (insert )
34
36
import Data.Map.Strict qualified as Map
35
37
import Data.Set qualified as Set
36
38
import Data.Text qualified as T
39
+ import Data.Tuple.Extra ((&&&) )
37
40
import Optics (over , set , (%) , (?~) , (^.) , (^?) , _Just )
38
41
import Primer.Action.Actions (Action (.. ), Movement (.. ), QualifiedText )
39
42
import Primer.Action.Available qualified as Available
@@ -260,16 +263,23 @@ applyActionsToField smartHoles imports (mod, mods) (tyName, conName', index, tyD
260
263
where
261
264
go :: ActionM m => m ([Module ], TypeZ )
262
265
go = do
266
+ (tz, cs) <-
267
+ getCompose
268
+ . flip (findAndAdjustA ((== conName') . valConName)) (astTypeDefConstructors tyDef)
269
+ $ Compose . \ (ValCon _ ts) -> do
270
+ (tz', cs') <-
271
+ getCompose . flip (adjustAtA index) ts $
272
+ Compose
273
+ . fmap (First . Just &&& target . top)
274
+ . flip withWrappedType \ tz'' ->
275
+ foldlM (\ l a -> local addParamsToCxt $ applyActionAndSynth a l) (InType tz'') actions
276
+ maybe
277
+ (throwError $ InternalFailure " applyActionsToField: con field index out of bounds" )
278
+ (pure . first (First . Just ))
279
+ $ bisequence (getFirst tz', ValCon conName' <$> cs')
263
280
(valCons, zt) <-
264
- (maybe (throwError $ InternalFailure " applyActionsToField: con name not found" ) pure =<< ) $
265
- flip (findAndAdjustA' ((== conName') . valConName)) (astTypeDefConstructors tyDef) \ (ValCon _ ts) -> do
266
- (t, zt) <-
267
- maybe (throwError $ InternalFailure " applyActionsToField: con field index out of bounds" ) pure
268
- =<< flip (adjustAtA' index) ts \ fieldType -> do
269
- zt <- withWrappedType fieldType \ zt ->
270
- foldlM (\ l -> local addParamsToCxt . flip applyActionAndSynth l) (InType zt) actions
271
- pure (target (top zt), zt)
272
- pure (ValCon conName' t, zt)
281
+ maybe (throwError $ InternalFailure " applyActionsToField: con name not found" ) pure $
282
+ bisequence (cs, getFirst tz)
273
283
let mod' = mod {moduleTypes = insert tyName (TypeDefAST tyDef{astTypeDefConstructors = valCons}) $ moduleTypes mod }
274
284
(,zt) <$> checkEverything smartHoles (CheckEverything {trusted = imports, toCheck = mod' : mods})
275
285
addParamsToCxt :: TC. Cxt -> TC. Cxt
0 commit comments