diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+# 2.0.1.0
+
+  * Add `mapMaybe`, `dedup`, `filter`, `fold`, `fold1`, `scan`, `dedupOn`,
+    `catMaybes` synonyms.
+
 # 2.0.0.0
 
   * Scrap `HasField` typeclass; add row types
diff --git a/doc/guide.pdf b/doc/guide.pdf
Binary files a/doc/guide.pdf and b/doc/guide.pdf differ
diff --git a/jacinda.cabal b/jacinda.cabal
--- a/jacinda.cabal
+++ b/jacinda.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.0
 name:               jacinda
-version:            2.0.0.0
+version:            2.0.1.0
 license:            AGPL-3
 license-file:       COPYING
 maintainer:         vamchale@gmail.com
@@ -77,7 +77,7 @@
         directory,
         filepath,
         microlens-mtl >=0.1.8.0,
-        vector,
+        vector >=0.12.2.0,
         recursion >=1.0.0.0,
         split
 
@@ -108,7 +108,7 @@
     build-depends:
         base,
         jacinda-lib,
-        optparse-applicative >=0.13.0.0,
+        optparse-applicative >=0.14.1.0,
         text
 
     if impl(ghc >=8.0)
diff --git a/man/ja.1 b/man/ja.1
--- a/man/ja.1
+++ b/man/ja.1
@@ -1,26 +1,9 @@
-.\" Automatically generated by Pandoc 3.1.6.1
+.\" Automatically generated by Pandoc 3.1.7
 .\"
-.\" Define V font for inline verbatim, using C font in formats
-.\" that render this, and otherwise B font.
-.ie "\f[CB]x\f[]"x" \{\
-. ftr V B
-. ftr VI BI
-. ftr VB B
-. ftr VBI BI
-.\}
-.el \{\
-. ftr V CR
-. ftr VI CI
-. ftr VB CB
-. ftr VBI CBI
-.\}
 .TH "ja (1)" "" "" "" ""
-.hy
 .SH NAME
-.PP
 ja - Jacinda: data filtering, processing, reporting
 .SH SYNOPSIS
-.PP
 ja run src.jac -i data.txt
 .PP
 cat FILE1 FILE2 | ja \[aq]#\[dq]$0\[cq]
@@ -29,10 +12,8 @@
 .PP
 ja e \[aq]11.67*1.2\[cq]
 .SH DESCRIPTION
-.PP
 \f[B]Jacinda\f[R] is a data stream processing language à la AWK.
 .SH SUBCOMMANDS
-.PP
 \f[B]run\f[R] - Run a program from file
 .PP
 \f[B]tc\f[R] - Typecheck a program
@@ -50,11 +31,9 @@
 Include directory for imports
 .SH LANGUAGE
 .SS REGEX
-.PP
 Regular expressions follow Rust\[cq]s regex library:
 https://docs.rs/regex/
 .SS BUILTINS
-.PP
 \f[B]:i\f[R] Postfix operator: parse integer
 .PP
 \f[B]:f\f[R] Postfix operator: parse float
@@ -159,7 +138,6 @@
 .PP
 \f[B]nf\f[R] Number of fields
 .SS SYNTAX
-.PP
 \f[B]\[ga]n\f[R] nth field
 .PP
 \f[B]\[ga]*\f[R] last field
@@ -187,13 +165,11 @@
 .PP
 \f[B]\[at]include\[aq]/path/file.jac\[cq]\f[R] File include
 .SS DECLARATIONS
-.PP
 \f[B]:set fs=/REGEX/;\f[R] Set field separator
 .PP
 \f[B]:flush;\f[R] Flush stdout for every line
 .SH INFLUENTIAL ENVIRONMENT VARIABLES
-.PP
-\f[V]JAC_PATH\f[R] - colon-separated list of directories to search
+\f[CR]JAC_PATH\f[R] - colon-separated list of directories to search
 .SH EXAMPLES
 .TP
 [#x>72] #. $0
@@ -238,11 +214,9 @@
 \&.?{|\[ga]1 \[ti]* 1 /([\[ha]\[rs]?]*)/}
 Trim URL
 .SH BUGS
-.PP
 Please report any bugs you may come across to
 https://github.com/vmchale/jacinda/issues
 .SH COPYRIGHT
-.PP
 Copyright 2021-2022.
 Vanessa McHale.
 All Rights Reserved.
diff --git a/src/A.hs b/src/A.hs
--- a/src/A.hs
+++ b/src/A.hs
@@ -237,6 +237,7 @@
          | OptionVal { eLoc :: a, eMaybe :: Maybe (E a) }
          | Cond { eLoc :: a, eIf :: E a, eThen :: E a, eElse :: E a }
          | In { oop :: E a, ip :: Maybe (E a), mm :: Maybe (E a), istream :: E a }
+         | RwB { eLoc :: a, eBin :: BBin } | RwT { eLoc :: a, eTer :: BTer }
          deriving (Functor, Generic)
 
 instance Recursive (E a) where
@@ -276,6 +277,7 @@
             | OptionValF a (Maybe x)
             | CondF a x x x
             | InF x (Maybe x) (Maybe x) x
+            | RwBF a BBin | RwTF a BTer
             deriving (Generic, Functor, Foldable, Traversable)
 
 type instance Base (E a) = (EF a)
@@ -340,6 +342,12 @@
     pretty (OptionVal _ (Just e))                                 = "Some" <+> pretty e
     pretty (OptionVal _ Nothing)                                  = "None"
     pretty (Cond _ e0 e1 e2)                                      = "if" <+> pretty e0 <+> "then" <+> pretty e1 <+> "else" <+> pretty e2
+    pretty (RwB _ MapMaybe)                                       = "mapMaybe"
+    pretty (RwB _ DedupOn)                                        = "dedupOn"
+    pretty (RwB _ Filter)                                         = "filter"
+    pretty (RwT _ Fold)                                           = "fold"
+    pretty (RwT _ Scan)                                           = "scan"
+    pretty (RwB _ Fold1)                                          = "fold1"
 
 instance Show (E a) where show=show.pretty
 
@@ -374,6 +382,8 @@
     (==) _ RC{}                                 = error "Cannot compare compiled regex!"
     (==) (Paren _ e) e'                         = e == e'
     (==) e (Paren _ e')                         = e == e'
+    (==) (RwB _ b) (RwB _ b')                   = b == b'
+    (==) (RwT _ b) (RwT _ b')                   = b == b'
     (==) _ _                                    = False
 
 data C = IsNum | IsEq | IsOrd
diff --git a/src/L.x b/src/L.x
--- a/src/L.x
+++ b/src/L.x
@@ -116,8 +116,10 @@
         "|."                     { mkSym FloorSym }
         ⌊                        { mkSym FloorSym }
         "~."                     { mkSym DedupTok }
+        dedup                    { mkSym DedupTok }
         "~.*"                    { mkSym DedupOnTok }
         ".?"                     { mkSym CatMaybesTok }
+        catMaybes                { mkSym CatMaybesTok }
         ":?"                     { mkSym MapMaybeTok }
         "~*"                     { mkSym CapTok }
         "-."                     { mkSym NegTok }
@@ -155,6 +157,12 @@
         Some                     { mkBuiltin BuiltinSome }
         None                     { mkBuiltin BuiltinNone }
         fp                       { mkBuiltin BuiltinFp }
+        mapMaybe                 { mkBuiltin BuiltinMapMaybe }
+        dedupOn                  { mkBuiltin BuiltinDedupOn }
+        filter                   { mkBuiltin BuiltinFilt }
+        fold                     { mkBuiltin BuiltinFold }
+        fold1                    { mkBuiltin BuiltinFold1 }
+        scan                     { mkBuiltin BuiltinScan }
 
         ":i"                     { mkBuiltin BuiltinIParse }
         ":f"                     { mkBuiltin BuiltinFParse }
@@ -394,6 +402,12 @@
              | BuiltinSome
              | BuiltinNone
              | BuiltinFp
+             | BuiltinMapMaybe
+             | BuiltinDedupOn
+             | BuiltinFilt
+             | BuiltinFold
+             | BuiltinFold1
+             | BuiltinScan
 
 instance Pretty Builtin where
     pretty BuiltinIParse   = ":i"
@@ -410,6 +424,12 @@
     pretty BuiltinNone     = "None"
     pretty BuiltinFp       = "fp"
     pretty BuiltinCaptures = "captures"
+    pretty BuiltinMapMaybe = "mapMaybe"
+    pretty BuiltinDedupOn  = "dedupOn"
+    pretty BuiltinFilt     = "filter"
+    pretty BuiltinFold     = "fold"
+    pretty BuiltinFold1    = "fold1"
+    pretty BuiltinScan     = "scan"
 
 data Token a = EOF { loc :: a }
              | TokSym { loc :: a, _sym :: Sym }
diff --git a/src/Parser.y b/src/Parser.y
--- a/src/Parser.y
+++ b/src/Parser.y
@@ -137,6 +137,12 @@
     none { TokBuiltin $$ BuiltinNone }
     fp { TokBuiltin $$ BuiltinFp }
     captures { TokBuiltin $$ BuiltinCaptures }
+    mapMaybeL { TokBuiltin $$ BuiltinMapMaybe }
+    dedupOnL { TokBuiltin $$ BuiltinDedupOn }
+    filterL { TokBuiltin $$ BuiltinFilt }
+    foldL { TokBuiltin $$ BuiltinFold }
+    fold1L { TokBuiltin $$ BuiltinFold1 }
+    scanL { TokBuiltin $$ BuiltinScan }
 
     iParse { TokBuiltin $$ BuiltinIParse }
     fParse { TokBuiltin $$ BuiltinFParse }
@@ -273,6 +279,12 @@
   | rr { RegexLit (loc $1) (encodeUtf8 $ rr $1) }
   | min { BB $1 Min }
   | max { BB $1 Max }
+  | mapMaybeL { RwB $1 MapMaybe }
+  | dedupOnL { RwB $1 DedupOn }
+  | filterL { RwB $1 Filter }
+  | foldL { RwT $1 Fold }
+  | fold1L { RwB $1 Fold1 }
+  | scanL { RwT $1 Scan }
   | split { BB $1 Split }
   | match { BB $1 Match }
   | splitc { BB $1 Splitc }
diff --git a/src/Parser/Rw.hs b/src/Parser/Rw.hs
--- a/src/Parser/Rw.hs
+++ b/src/Parser/Rw.hs
@@ -56,4 +56,7 @@
     a (EAppF l e0@(TB _ Option) (EApp lϵ e1 e2))                                        = EApp l (EApp lϵ e0 e1) e2
     a (EAppF l e0@(TB _ AllCaptures) (EApp lϵ (EApp lϵϵ e1 e2) e3))                     = EApp l (EApp lϵ (EApp lϵϵ e0 e1) e2) e3
     a (EAppF l e0@(TB _ AllCaptures) (EApp lϵ e1 (EApp lϵϵ e2 e3)))                     = EApp l (EApp lϵ (EApp lϵϵ e0 e1) e2) e3
+    a (EAppF l (RwB l0 b) (EApp lϵ e1 e2))                                              = EApp l (EApp lϵ (BB l0 b) e1) e2
+    a (EAppF l (RwT l0 t) (EApp lϵ (EApp lϵϵ e1 e2) e3))                                = EApp l (EApp lϵ (EApp lϵϵ (TB l0 t) e1) e2) e3
+    a (EAppF l (RwT l0 t) (EApp lϵ e1 (EApp lϵϵ e2 e3)))                                = EApp l (EApp lϵ (EApp lϵϵ (TB l0 t) e1) e2) e3
     a x                                                                                 = embed x
