Comments (6)
Just a note for anyone else finding this from Google, constructors
was deprecated because it's no longer necessary. Enums like in the original request are now basically supported, you can do this:
let Enum = < A | B >
in [ Enum.A, Enum.B ]
from dhall-lang.
@srid @Koshroy : Note that newer versions of Dhall have a constructors
keyword, which provides a nicer solution to this problem. You can now do:
let type = constructors < A : {} | B : {} >
in [ type.A {=}, type.B {=} ]
from dhall-lang.
Unions are the recommended way to do this:
-- The type
< Type/A : {} | Type/B : {} >
-- The values
< Type/A = {=} | Type/B : { } >
< Type/A : { } | Type/B = {=} >
Even if Dhall added support for enums as a special case of unions it wouldn't significantly reduce the boilerplate because an enum literal would still need to specify all other alternatives
What I do in cases like these is define synonyms for each alternative, like this:
let Type/A = < Type/A = {=} | Type/B : { } >
in let Type/B = < Type/A : { } | Type/B = {=} >
in [ Type/A, Type/B, Type/B, TypeA ]
... or save the synonyms in named files:
$ cat Type/A
< Type/A = {=} | Type/B : { } >
$ cat Type/B
< Type/A : { } | Type/B = {=} >
$ cat example
[ ./Type/A , ./Type/B , ./Type/B , ./TypeA ]
This helps reduce the boilerplate so you only need to write out the full union literal once per alternative
from dhall-lang.
This answered my question! Thanks a lot!
from dhall-lang.
You're welcome! :)
from dhall-lang.
... or save the synonyms in named files:
This is not really practical for enums with say 10 constructors, right?
You would have ./Type/A
with 9 other alternatives; likewise for Type/B, Type/C, etc.
from dhall-lang.
Related Issues (20)
- `with` record update syntax removes other record fields HOT 4
- ABNF grammar should list "as Bytes" import mode
- Should the ABNF grammar disallow shebangs inside expressions? HOT 1
- eta-reducing to merge HOT 4
- Builtins operators reference: Missing record projection HOT 2
- ABNF grammar should explicitly disallow keywords as identifiers? HOT 2
- ABNF grammar should include a mandatory whitespace after `import-hashed`? HOT 1
- Improvements and fixes in the standard documentation HOT 3
- Is this an incorrect test file: `dhall-lang/tests/import/success/unit/ImportRelativeToHomeB.dhall`? HOT 2
- Link to non existing tweet
- A minimalistic proposal for do-notation
- Thoughts on introducing a minimum amount of type inference in Dhall HOT 1
- Introduce Bytes/length and Text/length as built-ins? HOT 3
- Is there a security hole: malicious sha256-protected cached content? HOT 1
- Eta-equivalence in `assert`? HOT 13
- A type level equivalent of the `with` keyword HOT 11
- Convert assertions to Leibniz equality types HOT 3
- A minimalistic proposal for adding row and column polymorphism to Dhall HOT 2
- A proposal for a "lightweight Dhall implementations" standard
- Year, Month, and Date extraction from a Date HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dhall-lang.