Title: How to create a Traversal for a List of arbitrary length · Issue #430 · functionaljava/functionaljava · GitHub
Open Graph Title: How to create a Traversal for a List of arbitrary length · Issue #430 · functionaljava/functionaljava
X Title: How to create a Traversal for a List of arbitrary length · Issue #430 · functionaljava/functionaljava
Description: Since there's no usable documentation for this library I'll ask a question here. I have a Cart which may have an Item in it. An Item has a Discount, which may be NoDiscount or PercentDiscount. public record Cart(String id, Item item, int...
Open Graph Description: Since there's no usable documentation for this library I'll ask a question here. I have a Cart which may have an Item in it. An Item has a Discount, which may be NoDiscount or PercentDiscount. publ...
X Description: Since there's no usable documentation for this library I'll ask a question here. I have a Cart which may have an Item in it. An Item has a Discount, which may be NoDiscount or PercentDiscou...
Opengraph URL: https://github.com/functionaljava/functionaljava/issues/430
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"How to create a Traversal for a List of arbitrary length","articleBody":"Since there's no usable documentation for this library I'll ask a question here.\r\n\r\nI have a ```Cart``` which may have an ```Item``` in it. An ```Item``` has a ```Discount```, which may be ```NoDiscount``` or ```PercentDiscount```.\r\n\r\n```java\r\npublic record Cart(String id, Item item, int quantity)\r\n\r\npublic record Item(String sku, double price, int leftInStock, Discount discount)\r\n\r\nsealed interface Discount permits NoDiscount, PercentDiscount\r\n\r\npublic record NoDiscount() implements Discount\r\n\r\npublic record PercentDiscount(double value) implements Discount\r\n```\r\n\r\nI have some Optics:\r\n\r\n```java\r\nprivate static final Lens\u003cCart, Item\u003e itemL = Lens.lens(Cart::item, (Item i) -\u003e (Cart c) -\u003e new Cart(c.id(), i, c.quantity()));\r\n\r\nprivate static final Lens\u003cItem, Discount\u003e discountL = Lens.lens(Item::discount, d -\u003e i -\u003e new Item(i.sku(), i.price(), i.leftInStock(), d)); \r\n\r\nprivate static final Prism\u003cDiscount, Double\u003e onlyPctDiscount\r\n\t= Prism.prism(\r\n\t\td -\u003e {\r\n\t\t\tif(d instanceof PercentageOff) {\r\n\t\t\t\treturn Option.some(((PercentageOff) d).value());\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn Option.none();\r\n\t\t\t}\r\n\t\t},\r\n\t\tPercentageOff::new\r\n\t);\r\n```\r\n\r\nThis code recalulates the ```Item```'s ```Discount``` given a ```Cart```:\r\n\r\n```java\r\nitemL.composeLens(discountL).composePrism(onlyPctDiscount).modify(calculation).f(cart);\r\n```\r\n\r\nIf I change the ```Cart``` to have a ```List``` of ```Item```'s, to recalculate the discount for each item in the cart I'm pretty sure I need to change that ```Prism``` to a ```Traversal```.\r\n\r\nHow do I create a traversal for a list with any number of ```Item```s. From what I can make out FJ only allows ```Traversal```s for 2 to 6 items in a ```List```.","author":{"url":"https://github.com/JohnMcGuinness","@type":"Person","name":"JohnMcGuinness"},"datePublished":"2021-04-08T00:44:29.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/430/functionaljava/issues/430"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:66ac7b04-7261-54e4-4908-09d0ffcefca1 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | DE18:30EE07:25077B:310A53:6971525A |
| html-safe-nonce | fb00bddbafbfb7286b72a915d46ac2a1442557e0db507077ad814c5a4f061fab |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJERTE4OjMwRUUwNzoyNTA3N0I6MzEwQTUzOjY5NzE1MjVBIiwidmlzaXRvcl9pZCI6IjcyMjEyNTQ4MjcyMjcwNDIzOTUiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 0df8c79cc6020b019d6b2a92b4a3299e260eb47a905cf2b617018bc7e327ead9 |
| hovercard-subject-tag | issue:852950993 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/functionaljava/functionaljava/430/issue_layout |
| twitter:image | https://opengraph.githubassets.com/2233c5c831c52d49e5bb20a15e3e74d2e536be0de06a5c5c18754531dbfa4a59/functionaljava/functionaljava/issues/430 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/2233c5c831c52d49e5bb20a15e3e74d2e536be0de06a5c5c18754531dbfa4a59/functionaljava/functionaljava/issues/430 |
| og:image:alt | Since there's no usable documentation for this library I'll ask a question here. I have a Cart which may have an Item in it. An Item has a Discount, which may be NoDiscount or PercentDiscount. publ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | JohnMcGuinness |
| hostname | github.com |
| expected-hostname | github.com |
| None | da7cbccf7f40bcd9540003423d9bef63b2fe7bb0b73fc59d91b5ae5b46000c90 |
| turbo-cache-control | no-preview |
| go-import | github.com/functionaljava/functionaljava git https://github.com/functionaljava/functionaljava.git |
| octolytics-dimension-user_id | 458836 |
| octolytics-dimension-user_login | functionaljava |
| octolytics-dimension-repository_id | 1033614 |
| octolytics-dimension-repository_nwo | functionaljava/functionaljava |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1033614 |
| octolytics-dimension-repository_network_root_nwo | functionaljava/functionaljava |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | c9e6c71b091ca750658a3b2e3c82b0b85555f788 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width