@@ -114,6 +114,12 @@ isDollar = \case
114114 HsVar _ (L _ v) -> v == GHC. mkVarUnqual " $"
115115 _ -> False
116116
117+ -- | Is (-<)?
118+ isFletching :: p ~ GhcPs => HsExpr p -> Bool
119+ isFletching = \ case
120+ HsVar _ (L _ v) -> v == GHC. mkVarUnqual " -<"
121+ _ -> False
122+
117123imap :: (Int -> a -> b ) -> [a ] -> [b ]
118124imap f = zipWith f [0 .. ]
119125
@@ -434,8 +440,10 @@ circuitBody = \case
434440 L _ (HsArrApp _xapp (L _ (HsVar _ (L _ (GHC. Unqual occ)))) arg _ _)
435441 | OccName. occNameString occ == " idC" -> circuitMasters .= bindMaster arg
436442#else
437- L _ (HsProc _ _ (L _ (HsCmdTop _ (L _ (HsCmdArrApp _xapp (L _ (HsVar _ (L _ (GHC. Unqual occ)))) arg _ _)))))
438- | OccName. occNameString occ == " idC" -> circuitMasters .= bindMaster arg
443+ L _ (OpApp _ (L _ (HsVar _ (L _ (GHC. Unqual occ)))) (L _ op) port)
444+ | isFletching op
445+ , OccName. occNameString occ == " idC" -> do
446+ circuitMasters .= bindMaster port
439447#endif
440448
441449 -- Otherwise create a binding and use that as the master. This is equivalent to changing
@@ -521,6 +529,7 @@ bindMaster (L loc expr) = case expr of
521529 ExprWithTySig ty expr' -> PortType ty (bindMaster expr')
522530 ELazyPat _ expr' -> Lazy loc (bindMaster expr')
523531#else
532+ -- XXX: Untested?
524533 HsProc _ _ (L _ (HsCmdTop _ (L _ (HsCmdArrApp _xapp (L _ (HsVar _ (L _ (GHC. Unqual occ)))) sig _ _))))
525534 | OccName. occNameString occ == " Signal" -> SignalExpr sig
526535 ExprWithTySig _ expr' ty -> PortType ty (bindMaster expr')
@@ -544,7 +553,7 @@ bodyBinding
544553 -> GenLocated loc (HsExpr p )
545554 -- ^ the statement with an optional @-<@
546555 -> CircuitM ()
547- bodyBinding mInput lexpr@ (L loc expr) =
556+ bodyBinding mInput lexpr@ (L loc expr) = do
548557 case expr of
549558#if __GLASGOW_HASKELL__ < 810
550559 HsArrApp _xhsArrApp circuit port HsFirstOrderApp True ->
@@ -554,7 +563,7 @@ bodyBinding mInput lexpr@(L loc expr) =
554563 , bIn = fromMaybe (Tuple [] ) mInput
555564 }]
556565#else
557- HsProc _ _ (L _ ( HsCmdTop _ ( L _ ( HsCmdArrApp _xhsArrApp circuit port HsFirstOrderApp True )))) ->
566+ OpApp _ circuit (L _ op) port | isFletching op -> do
558567 circuitBinds <>= [Binding
559568 { bCircuit = circuit
560569 , bOut = bindMaster port
0 commit comments