@@ -1059,6 +1059,26 @@ function unprefix_optic(optic, optic_prefix)
10591059 return unprefix_optic (_outer (optic), _outer (optic_prefix))
10601060end
10611061
1062+ """
1063+ unprefix(vn::VarName, prefix::VarName)
1064+
1065+ Remove a prefix from a VarName.
1066+
1067+ ```jldoctest
1068+ julia> AbstractPPL.unprefix(@varname(y.x), @varname(y))
1069+ x
1070+
1071+ julia> AbstractPPL.unprefix(@varname(y.x.a), @varname(y))
1072+ x.a
1073+
1074+ julia> AbstractPPL.unprefix(@varname(y[1].x), @varname(y[1]))
1075+ x
1076+
1077+ julia> AbstractPPL.unprefix(@varname(y), @varname(n))
1078+ ERROR: ArgumentError: could not remove prefix n from VarName y
1079+ [...]
1080+ ```
1081+ """
10621082function unprefix (
10631083 vn:: VarName{sym_vn} , prefix:: VarName{sym_prefix}
10641084) where {sym_vn,sym_prefix}
@@ -1071,6 +1091,22 @@ function unprefix(
10711091 return optic_to_vn (unprefix_optic (optic_vn, optic_prefix))
10721092end
10731093
1094+ """
1095+ prefix(vn::VarName, prefix::VarName)
1096+
1097+ Add a prefix to a VarName.
1098+
1099+ ```jldoctest
1100+ julia> AbstractPPL.prefix(@varname(x), @varname(y))
1101+ y.x
1102+
1103+ julia> AbstractPPL.prefix(@varname(x.a), @varname(y))
1104+ y.x.a
1105+
1106+ julia> AbstractPPL.prefix(@varname(x.a), @varname(y[1]))
1107+ y[1].x.a
1108+ ```
1109+ """
10741110function prefix (vn:: VarName{sym_vn} , prefix:: VarName{sym_prefix} ) where {sym_vn,sym_prefix}
10751111 optic_vn = getoptic (vn)
10761112 optic_prefix = getoptic (prefix)
0 commit comments