Optic doesn't support Symbol.
See original GitHub issueWell, Optic is support String, Array …etc However, the ES6 new type Symbol is mostly support by modern browser and Node.js. But, if we create a new Optic like this:
[
Symbol(),
'string'
]
The error is throw.
Issue Analytics
- State:
- Created 5 years ago
- Comments:8 (4 by maintainers)
Top Results From Across the Web
Optical Drives (CD/DVD) Icon Not Showing in My Computer
Hi, Optical Drivers (CD/DVD) icon not showing in my computer window. Many times Windows users face strange problem when they can't see the ......
Read more >Optical Disk Drive is not recognized in Microsoft Windows or ...
The instructions below help you diagnose and resolve issues if your CD, DVD, or Blu-Ray drive is not being recognized in Microsoft Windows ......
Read more >Material Symbols guide | Google Fonts
Symbols are available in three styles and four adjustable variable font axes (fill, weight, grade, and optical size).
Read more >Creating custom symbol images for your app - Apple Developer
Create, organize, and annotate symbol images using SF Symbols.
Read more >Infant Optics DXR-8 Troubleshooting - iFixit
If the battery is plugged in correctly and charged, but the Monitor is still not working, the battery is faulty. Consider purchasing a...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Ah… Good question.
xi2yF
spells out the signature of the parameter: it is a function that maps the value under scrutinyx
and its indexi
to the resulting valuey
in functorF
.Yes, currently Partial Lenses do not support symbols and in non-production mode the library raises an exception as seen here.
I’m not opposed to supporting symbols, but I’m not entirely sure what the best way to support them would be. Ramda, for example, does not currently support symbols. It seems that the use case of symbols is to avoid name clashes.
Even JavaScript itself seems rather undecided on how symbol properties should be treated: object spread ignores them, whileObject spread andObject.assign
copies them as seen here.Object.assign
copy symbols as seen here.I did some quick tests and it seems that copying symbol properties (using builtin
Object.assign
orObject.getOwnPropertySymbols
) would cause something like a 2x performance hit in latest Node for property lenses. Note that I mean this in the sense of supporting the possibility of having symbol properties—I actually tested this on objects that did not have symbol properties, so there was no extra cost of actually copying more. Hopefully future JS engines will have faster implementations ofObject.assign
and then supporting symbol properties could be done without taking a performance hit.For the above two reasons, namely
I’d rather not enhance the default property lenses in Partial Lenses to support symbol properties at this point. The above concerns may change in the future (IOW, a consensus may be reached and copying symbol properties might get significantly faster) at which point this could be reconsidered.
Note that you can always write custom optics for accessing objects with symbol properties. Here is a simple example using
L.lens
and here is a version that also provides the symbol or string as the index (Oops: Fixed!). At the moment this is what I’d recommend if you need to access objects with symbol properties.Also, it might be useful to add the above
sym
lens to the library. Possibly with a better name? Name suggestions and/or PR is welcome!