diff --git a/dataframe-core.cabal b/dataframe-core.cabal
--- a/dataframe-core.cabal
+++ b/dataframe-core.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.4
 name:               dataframe-core
-version:            2.1.1.0
+version:            2.1.1.1
 synopsis:           Core data structures for the dataframe library.
 description:
     Minimal interchange-format types for the @dataframe@ ecosystem:
diff --git a/src-internal/DataFrame/Internal/Expression.hs b/src-internal/DataFrame/Internal/Expression.hs
--- a/src-internal/DataFrame/Internal/Expression.hs
+++ b/src-internal/DataFrame/Internal/Expression.hs
@@ -118,7 +118,18 @@
     show :: UExpr -> String
     show (UExpr expr) = show expr
 
+toUExpr :: (Columnable a) => Expr a -> UExpr
+toUExpr = UExpr
+
+fromUExpr :: forall a. (Columnable a) => UExpr -> Maybe (Expr a)
+fromUExpr (UExpr (expr :: Expr b)) = do
+    Refl <- testEquality (typeRep @a) (typeRep @b)
+    pure expr
+
 type NamedExpr = (T.Text, UExpr)
+
+toNamedExpr :: (Columnable a) => T.Text -> Expr a -> NamedExpr
+toNamedExpr exprName expr = (exprName, UExpr expr)
 
 instance (Num a, Columnable a) => Num (Expr a) where
     (+) :: Expr a -> Expr a -> Expr a
