Open
Conversation
For generic decoding, `Decode (Foo a)` needs a `Decode a` constraint, but it *doesn't* need a `Generic a` constraint. Adding in this unnecessary constraint creates needless problems like, "there isn't an instance for `Generic String _`."
PureScript isn't happy with eta-reduced typeclass instances on recursive types. We have to make the function application explicit.
…y (Container A)`. The generated code will include an `Eq a =>` constraint.
* Sum types where every constructor has zero arguments. Aeson has special handling for these.
For generic decoding, `Decode (Foo a)` needs a `Decode a` constraint, but it *doesn't* need a `Generic a` constraint. Adding in this unnecessary constraint creates needless problems like, "there isn't an instance for `Generic String _`."
…xy (Container A)`. The generated code will include an `Ord a =>` constraint.
It turns out you can't eta-reduce typeclass instances for recursively-defined typeclasses in PureScript. That is: `show = genericShow` ...has to be replaced with: `show x = genericShow` ...to work reliably. See: purescript/purescript#2975
That is, `(genericShow <*> mkSumType) (Proxy @(Foo A))` will generate: ``` instance showFoo :: Show a => Show (Foo a) where show = genericShow ``` ...whereas before it would have missed out the `Show a` constraint.
Contributor
Author
|
Once purescript/spago#1310 is merged and Spago is updated via |
|
@kindaro @peterbecich do you also find that for newer GHC releases |
d9881a0 to
bd6a996
Compare
get Spago 0.93.44 use ghc 9.8 update spago.lock
replace Magic Nix Cache with https://github.com/nix-community/cache-nix-action
Contributor
Author
|
Contributor
Author
|
@eskimor , @flip111 , @kindaro , please review This branch is in a working state. Test and example coverage is excellent. This PR should not be a regression. The library is easier to iterate and test now. For any issues that still exist, it should be easier for myself and others to follow up on them. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#63
CodeGenSwitchesno longer usedProxyno longer usedPrinterusesLeijen.Textinstead ofTextgenericShowPureScript instanceShow#85instanceToImportLinesinstead of being divided between two modulesRoundTriptests implemented by IOHKjson-helpersand exposes issuesTODO
check that derivedGenericinstances are correctfixRoundTriptestsome other broken testsThe PR supports https://github.com/input-output-hk/purescript-bridge-json-helpers and the existing library https://github.com/coot/purescript-argonaut-aeson-generic
The issues with
purescript-argonaut-aeson-genericare documented in the readme. Importantly, these issues exist onmasterright now without the PR, so I think it should not block merging. Discussion purescript-contrib/purescript-argonaut-codecs#115 (comment)The other library https://github.com/paf31/purescript-foreign-generic continues to be supported, but the test coverage is much less than the other two.