Skip to content

Commit cfd6029

Browse files
committed
Make prefix more type-stable
1 parent 87e3120 commit cfd6029

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

src/varname.jl

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,19 +1112,28 @@ julia> AbstractPPL.prefix(@varname(x.a), @varname(y[1]))
11121112
y[1].x.a
11131113
```
11141114
"""
1115-
function prefix(vn::VarName{sym_vn}, prefix::VarName{sym_prefix}) where {sym_vn,sym_prefix}
1115+
function prefix(
1116+
vn::VarName{sym_vn,Toptic_vn}, prefix::VarName{sym_prefix,Toptic_prefix}
1117+
) where {sym_vn,sym_prefix,Toptic_vn,Toptic_prefix}
11161118
optic_vn = getoptic(vn)
11171119
optic_prefix = getoptic(prefix)
1118-
# Special case `identity` to avoid having ComposedFunctions with identity
1119-
if optic_vn == identity
1120-
new_inner_optic_vn = PropertyLens{sym_vn}()
1121-
else
1122-
new_inner_optic_vn = optic_vn PropertyLens{sym_vn}()
1123-
end
1124-
if optic_prefix == identity
1125-
new_optic_vn = new_inner_optic_vn
1126-
else
1127-
new_optic_vn = new_inner_optic_vn optic_prefix
1128-
end
1129-
return VarName{sym_prefix}(new_optic_vn)
1120+
new_optic = (optic_vn PropertyLens{sym_vn}()) optic_prefix
1121+
return VarName{sym_prefix}(new_optic)
1122+
end
1123+
function prefix(
1124+
::VarName{sym_vn,typeof(identity)}, prefix::VarName{sym_prefix,Toptic_prefix}
1125+
) where {sym_vn,sym_prefix,Toptic_prefix}
1126+
new_optic = PropertyLens{sym_vn}() getoptic(prefix)
1127+
return VarName{sym_prefix}(new_optic)
1128+
end
1129+
function prefix(
1130+
vn::VarName{sym_vn,Toptic_vn}, ::VarName{sym_prefix,typeof(identity)}
1131+
) where {sym_vn,sym_prefix,Toptic_vn}
1132+
new_optic = getoptic(vn) PropertyLens{sym_vn}()
1133+
return VarName{sym_prefix}(new_optic)
1134+
end
1135+
function prefix(
1136+
::VarName{sym_vn,typeof(identity)}, ::VarName{sym_prefix,typeof(identity)}
1137+
) where {sym_vn,sym_prefix}
1138+
return VarName{sym_prefix}(PropertyLens{sym_vn}())
11301139
end

0 commit comments

Comments
 (0)