Skip to content

Commit 043d92f

Browse files
krame505quark17
authored andcommitted
Add Functor and Applicative instances for Monads
1 parent 0b42f0b commit 043d92f

5 files changed

Lines changed: 48 additions & 18 deletions

File tree

Libraries/GenC/GenCMsg/GenCMsg.bs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -277,8 +277,8 @@ instance (FIFOs' a brx1 nrx1 btx1 ntx1, FIFOs' b brx2 nrx2 btx2 ntx2,
277277
Add brx1 prx1 brx, Add brx2 prx2 brx, Add btx1 ptx1 btx, Add btx2 ptx2 btx,
278278
Add nrx1 nrx2 nrx, Add ntx1 ntx2 ntx) =>
279279
FIFOs' (a, b) brx nrx btx ntx where
280-
mkRxCredits' _ = liftM2 append (mkRxCredits' (_ :: a)) (mkRxCredits' (_ :: b))
281-
mkTxCredits' _ = liftM2 append (mkTxCredits' (_ :: a)) (mkTxCredits' (_ :: b))
280+
mkRxCredits' _ = liftA2 append (mkRxCredits' (_ :: a)) (mkRxCredits' (_ :: b))
281+
mkTxCredits' _ = liftA2 append (mkTxCredits' (_ :: a)) (mkTxCredits' (_ :: b))
282282
mkFIFOs' rxCredits rxTagEq rxBody deq txCredits enq = do
283283
(fifos1, rs1) <- mkFIFOs'
284284
(take rxCredits) rxTagEq rxBody deq
@@ -288,8 +288,8 @@ instance (FIFOs' a brx1 nrx1 btx1 ntx1, FIFOs' b brx2 nrx2 btx2 ntx2,
288288
(takeTail txCredits) (\ txTag txBody -> enq txTag txBody)
289289
return ((fifos1, fifos2), rs1 `rJoinDescendingUrgency` rs2)
290290

291-
genCMsgTypeHeaderDcls' _ = liftM2 strConcat (genCMsgTypeHeaderDcls' (_ :: a)) (genCMsgTypeHeaderDcls' (_ :: b))
292-
genCMsgTypeImplDcls' _ = liftM2 strConcat (genCMsgTypeImplDcls' (_ :: a)) (genCMsgTypeImplDcls' (_ :: b))
291+
genCMsgTypeHeaderDcls' _ = liftA2 strConcat (genCMsgTypeHeaderDcls' (_ :: a)) (genCMsgTypeHeaderDcls' (_ :: b))
292+
genCMsgTypeImplDcls' _ = liftA2 strConcat (genCMsgTypeImplDcls' (_ :: a)) (genCMsgTypeImplDcls' (_ :: b))
293293
genCFIFOStructItems' _ = genCFIFOStructItems' (_ :: a) +++ genCFIFOStructItems' (_ :: b)
294294
genCFIFOInitCredits' _ = genCFIFOInitCredits' (_ :: a) +++ genCFIFOInitCredits' (_ :: b)
295295
genCFIFORestoreCredits' _ = genCFIFORestoreCredits' (_ :: a) +++ genCFIFORestoreCredits' (_ :: b)

Libraries/GenC/GenCRepr/GenCRepr.bs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ instance (GenCStructBody a n1, GenCStructBody b n2, Add n1 n2 n) =>
559559
genCPackStructBody _ nested sel =
560560
genCPackStructBody (_ :: a) nested sel +++ "\n" +++ genCPackStructBody (_ :: b) nested sel
561561

562-
unpackStructBody = liftM2 tuple2 unpackStructBody unpackStructBody
562+
unpackStructBody = liftA2 tuple2 unpackStructBody unpackStructBody
563563
genCUnpackStructBody _ nested sel =
564564
genCUnpackStructBody (_ :: a) nested sel +++ "\n" +++ genCUnpackStructBody (_ :: b) nested sel
565565

@@ -648,13 +648,13 @@ instance (GenCDecls' a) => GenCDecls' (Meta m a) where
648648

649649
instance (GenCDecls' a, GenCDecls' b) => GenCDecls' (Either a b) where
650650
componentTypeNames' _ = componentTypeNames' (_ :: a) `append` componentTypeNames' (_ :: b)
651-
genCHeaderDecls' _ = liftM2 strConcat (genCHeaderDecls' (_ :: a)) (genCHeaderDecls' (_ :: b))
652-
genCImplDecls' _ = liftM2 strConcat (genCImplDecls' (_ :: a)) (genCImplDecls' (_ :: b))
651+
genCHeaderDecls' _ = liftA2 strConcat (genCHeaderDecls' (_ :: a)) (genCHeaderDecls' (_ :: b))
652+
genCImplDecls' _ = liftA2 strConcat (genCImplDecls' (_ :: a)) (genCImplDecls' (_ :: b))
653653

654654
instance (GenCDecls' a, GenCDecls' b) => GenCDecls' (a, b) where
655655
componentTypeNames' _ = componentTypeNames' (_ :: a) `append` componentTypeNames' (_ :: b)
656-
genCHeaderDecls' _ = liftM2 strConcat (genCHeaderDecls' (_ :: a)) (genCHeaderDecls' (_ :: b))
657-
genCImplDecls' _ = liftM2 strConcat (genCImplDecls' (_ :: a)) (genCImplDecls' (_ :: b))
656+
genCHeaderDecls' _ = liftA2 strConcat (genCHeaderDecls' (_ :: a)) (genCHeaderDecls' (_ :: b))
657+
genCImplDecls' _ = liftA2 strConcat (genCImplDecls' (_ :: a)) (genCImplDecls' (_ :: b))
658658

659659
instance GenCDecls' () where
660660
componentTypeNames' _ = nil
@@ -682,8 +682,8 @@ class GenAllCDecls a where
682682
genAllCImplDecls :: a -> State (List String) String
683683

684684
instance (GenCDecls a, GenAllCDecls b) => GenAllCDecls (a, b) where
685-
genAllCHeaderDecls _ = liftM2 strConcat (genCHeaderDecls (_ :: a)) (genAllCHeaderDecls (_ :: b))
686-
genAllCImplDecls _ = liftM2 strConcat (genCImplDecls (_ :: a)) (genAllCImplDecls (_ :: b))
685+
genAllCHeaderDecls _ = liftA2 strConcat (genCHeaderDecls (_ :: a)) (genAllCHeaderDecls (_ :: b))
686+
genAllCImplDecls _ = liftA2 strConcat (genCImplDecls (_ :: a)) (genAllCImplDecls (_ :: b))
687687

688688
instance (GenCDecls a) => GenAllCDecls a where
689689
genAllCHeaderDecls _ = genCHeaderDecls (_ :: a)

Libraries/GenC/GenCRepr/State.bs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,20 @@ package State where
44
-- TODO: should this be a bsc library?
55
data State s a = State (s -> (a, s))
66

7+
instance Functor (State s) where
8+
fmap f (State g) = State $ \ s ->
9+
case g s of
10+
(x, s') -> (f x, s')
11+
12+
instance Applicative (State s) where
13+
pure x = State $ \ s -> (x, s)
14+
liftA2 f (State g) (State h) = State $ \ s ->
15+
case g s of
16+
(x, s') ->
17+
case h s' of
18+
(y, s'') -> (f x y, s'')
19+
720
instance Monad (State s) where
8-
return x = State $ \ s -> (x, s)
921
bind (State f) g = State $ \ s1 ->
1022
case f s1 of
1123
(x, s2) ->

Libraries/SequenceRules/MList.bs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,14 @@ import List
1111

1212
data MList_ t a = MList_ (a, List t)
1313

14+
instance Functor (MList_ t) where
15+
fmap f (MList_ (x, xs)) = MList_ (f x, xs)
16+
17+
instance Applicative (MList_ t) where
18+
pure x = MList_ (x, Nil)
19+
liftA2 f (MList_ (a, as)) (MList_ (b, bs)) = MList_ (f a b, append as bs)
20+
1421
instance Monad (MList_ t) where
15-
return x = MList_ (x, Nil)
1622
bind (MList_ (a, as)) f =
1723
case f a of
1824
MList_ (b, bs) -> MList_ (b, append as bs)

Libraries/VerilogRepr/VerilogRepr.bs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,20 @@ data RenderVerilog a
301301
(List (String, String) -> List VDecl -> List TypeInfo ->
302302
(a, List (String, String), List VDecl, List TypeInfo))
303303

304+
instance Functor RenderVerilog where
305+
fmap f (RenderVerilog g) = RenderVerilog $ \ names decls infos ->
306+
case g names decls infos of
307+
(x, names', decls', infos') -> (f x, names', decls', infos')
308+
309+
instance Applicative RenderVerilog where
310+
pure x = RenderVerilog $ \ names decls infos -> (x, names, decls, infos)
311+
liftA2 f (RenderVerilog g) (RenderVerilog h) = RenderVerilog $ \ names decls infos ->
312+
case g names decls infos of
313+
(x, names', decls', infos') ->
314+
case h names' decls' infos' of
315+
(y, names'', decls'', infos'') -> (f x y, names'', decls'', infos'')
316+
304317
instance Monad RenderVerilog where
305-
return x = RenderVerilog $ \ names decls infos -> (x, names, decls, infos)
306318
bind (RenderVerilog f) g = RenderVerilog $ \ names decls infos ->
307319
case f names decls infos of
308320
(x, names', decls', infos') ->
@@ -541,7 +553,7 @@ instance VerilogRepr (Int n) where
541553

542554
instance (VerilogRepr a, Bits a n, TypeId a) => VerilogRepr (Maybe a) where
543555
verilogType = mkStructType "Prelude" "value"
544-
verilogFields _ base = liftM2 append
556+
verilogFields _ base = liftA2 append
545557
(mkField (prx :: Bool) ("has_" +++ base))
546558
(mkField (prx :: a) base)
547559

@@ -584,7 +596,7 @@ class VerilogTupleRepr a where
584596
RenderVerilog (List (VField, FieldInfo))
585597

586598
instance (VerilogRepr a, VerilogTupleRepr b) => VerilogTupleRepr (a, b) where
587-
verilogTupleFields _ i name = liftM2 append
599+
verilogTupleFields _ i name = liftA2 append
588600
(verilogFields (prx :: a) $ name +++ integerToString i)
589601
(verilogTupleFields (prx :: b) (i + 1) name)
590602

@@ -782,7 +794,7 @@ class VerilogSummands a where
782794

783795
instance (VerilogSummands a, VerilogSummands b) =>
784796
VerilogSummands (Either a b) where
785-
verilogSummands _ polyBaseName baseName pkg maxWidth = liftM2 append
797+
verilogSummands _ polyBaseName baseName pkg maxWidth = liftA2 append
786798
(verilogSummands (prx :: a) polyBaseName baseName pkg maxWidth)
787799
(verilogSummands (prx :: b) polyBaseName baseName pkg maxWidth)
788800

@@ -848,7 +860,7 @@ instance VerilogFields () where
848860
verilogFields' _ _ = return nil
849861

850862
instance (VerilogFields a, VerilogFields b) => VerilogFields (a, b) where
851-
verilogFields' _ named = liftM2 append
863+
verilogFields' _ named = liftA2 append
852864
(verilogFields' (prx :: a) named)
853865
(verilogFields' (prx :: b) named)
854866

0 commit comments

Comments
 (0)