Comments (6)
I'm not sure what exactly you're reporting here. The first example doesn't look unexpected because TResolvedBody
is never unified with anything.
from haxe.
I expect behavior like this
enum abstract GameType<TBody>(String) {
final Unit: GameType<{ hp: Float }>;
final Box: GameType<{ size: Float }>;
}
typedef GameObject<TBody> = {
final type: GameType<TBody>;
final body: TBody;
}
final objects: object: Array<GameObject<Unknown>> = [];
for (o in objects) {
switch (o.type) {
case Unit: o.body.hp -= 1;
case Box: o.body.size -= 1;
}
}
from haxe.
You can achieve it with one more step:
class Test {
static function main() {
final objects:Array<GameObject<Any>> = [
{type: Unit, body: {hp: 42}},
{type: Box, body: {size: 4.2}}
];
inline function foo<T>(o:GameObject<T>) {
switch (o.type) {
case Unit:
$type(o); // GameObject<{ hp : Float }>
case Box:
$type(o); // GameObject<{ size : Float }>
}
}
for (o in objects)
foo(o);
}
}
enum abstract GameType<TBody>(String) {
final Unit:GameType<{hp:Float}>;
final Box:GameType<{size:Float}>;
}
typedef GameObject<TBody> = {
final type:GameType<TBody>;
final body:TBody;
}
https://try.haxe.org/#A80ca1Da
from haxe.
Right. But why doesn't the same work for return-types?
from haxe.
I don't know if we want to support this kind of typing for monomorphs in general. Type inference is already tricky enough as it is, and changing it to support a corner case like here doesn't have a good risk/reward ratio in my opinion.
from haxe.
Sad to hear. I find it feature powerful when haxe-Enum cannot be used
from haxe.
Related Issues (20)
- Missing type parameter info when return type inferred from interface HOT 1
- Closures are not inlined when used through another inline closure
- Bug during haxe --macro Field index for SSL_IS_SERVER not found HOT 1
- Fatal error: exception EvalContext.RunTimeException(_, 0, _) HOT 1
- [js] It would be nice to have a more elegant output of default arguments in es6 HOT 4
- Add thousand seperator for numeric format HOT 3
- Macro interpreter memory leak, up to 24GB RAM usage observed HOT 10
- Strange macro behavior with server during heaps shader generation
- Hashlink - Passing default Single args results in 0 HOT 1
- [hxb] add configuration for shared string pools
- haxe not in alpine linux
- Issues with haxe in 4.3.4-2 HOT 4
- CompilerConfiguration.#args and Sys.args() are the same.
- @:structInit with getter+setter won't compile HOT 1
- IntIterators are not Iterable HOT 4
- [cpp] Abstract class functions with default values are broken
- [macro] reification pattern matching regression HOT 1
- Accessing super from a local function HOT 1
- Warning WInlineOptimizedField appear in some strange condition
- Abstract multitype value that is generic does not generate correctly in 4.3.4
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 haxe.