Re: Functions that return type
On Wednesday, 20 January 2016 at 04:27:27 UTC, blm768 wrote: I guess the constraints are that of a static language. (This is not true.) I'm playing with the design of such a language myself. Basically, anything can create/use/return type objects This is usually possible in dependently typed languages such as Idris, Agda or Coq. Check out Idris, it's rather small but very nice and interesting.
Re: Functions that return type
On Wednesday, 20 January 2016 at 10:04:03 UTC, burjui wrote: That's alright. Parsing and AST construction are trivial with S-expressions (Lisp-like syntax), so if you use them for the early stages of development, you can focus on the type system. When you're done with types, you can switch to making a better grammar for your language. True. I'd been playing with the idea of having multiple syntactic "front-ends" anyway (mainly for the purpose of making DSLs), so it wouldn't be too much of a stretch to use an S-expression syntax. One problem, though, is that I'd either have to extend that syntax to support some of the constructs I want (i.e array literals) or create a bunch of variadic constructor functions (which could be evaluated at compile time). Of course, S-expression syntax is kind of designed to be extensible... That's all off-topic, though. ;)
Re: Functions that return type
On Wednesday, 20 January 2016 at 04:27:27 UTC, blm768 wrote: It's not very far along, though. Right now, I have a "compiler" that parses integers and parentheses. ;) That's alright. Parsing and AST construction are trivial with S-expressions (Lisp-like syntax), so if you use them for the early stages of development, you can focus on the type system. When you're done with types, you can switch to making a better grammar for your language.
Re: Functions that return type
On 01/17/2016 08:09 PM, data pulverizer wrote: On Sunday, 17 January 2016 at 02:08:06 UTC, Timon Gehr wrote: On 01/16/2016 11:50 PM, data pulverizer wrote: I guess the constraints are that of a static language. (This is not true.) Could you please explain? E.g., a few of the systems discussed at https://ncatlab.org/nlab/show/pure+type+system would be a fine basis for a "static language" that supports returning types from functions.
Re: Functions that return type
On Sunday, 17 January 2016 at 02:08:06 UTC, Timon Gehr wrote: On 01/16/2016 11:50 PM, data pulverizer wrote: I guess the constraints are that of a static language. (This is not true.) I'm playing with the design of such a language myself. Basically, anything can create/use/return type objects, but a variable of a particular type can only be instantiated using an immutable type object whose value is known at compile time. It's not very far along, though. Right now, I have a "compiler" that parses integers and parentheses. ;)
Re: Functions that return type
On Sunday, 17 January 2016 at 02:08:06 UTC, Timon Gehr wrote: On 01/16/2016 11:50 PM, data pulverizer wrote: I guess the constraints are that of a static language. (This is not true.) Could you please explain?
Re: Functions that return type
On 01/16/2016 11:50 PM, data pulverizer wrote: I guess the constraints are that of a static language. (This is not true.)
Re: Functions that return type
On 01/16/2016 02:50 PM, data pulverizer wrote: > I guess I have been writing a lot of julia where I take > creating arrays and tuples of types for granted. In this case > types are of type DataType. [...] I guess the constraints are > that of a static language. Exactly. I am sure every D compiler has the equivalent of DataType and every type used in a program has instances of it but such information disappears by the end of compilation, except their properties in the form of TypeInfo as sarn has already mentioned. Ali
Re: Functions that return type
On Saturday, 16 January 2016 at 21:22:15 UTC, data pulverizer wrote: Is it possible to create a function that returns Type like typeof() does? Something such as: Type returnInt(){ return int; } More to the point what is the Type of a type such as int? Thanks p.s. I am aware I could do typeof(1) to return int, but I am looking for something more elegant and some understanding.
Re: Functions that return type
On Saturday, 16 January 2016 at 21:22:15 UTC, data pulverizer wrote: Is it possible to create a function that returns Type like typeof() does? Something such as: Type returnInt(){ return int; } Functions return values, not types. You would use a template to "return" a type. More to the point what is the Type of a type such as int? Thanks What is the value of a value such as 9? A type is a type, it does not have a type. If this is not clear, I can try to make it clearer.
Functions that return type
Is it possible to create a function that returns Type like typeof() does? Something such as: Type returnInt(){ return int; } More to the point what is the Type of a type such as int? Thanks
Re: Functions that return type
On Saturday, 16 January 2016 at 21:59:22 UTC, data pulverizer wrote: On Saturday, 16 January 2016 at 21:22:15 UTC, data pulverizer wrote: Is it possible to create a function that returns Type like typeof() does? Something such as: Type returnInt(){ return int; } More to the point what is the Type of a type such as int? Thanks p.s. I am aware I could do typeof(1) to return int, but I am looking for something more elegant and some understanding. Thanks for all the answers. I guess I have been writing a lot of julia where I take creating arrays and tuples of types for granted. In this case types are of type DataType. I am aware that you can create tuples of types in D, but then it cannot be easily manipulated e.g. (int, float)[0] = string or similar. You have to immediately alias it and there are a limited number of operations you can do with the resulting type. I guess the constraints are that of a static language.
Re: Functions that return type
On Saturday, 16 January 2016 at 21:22:15 UTC, data pulverizer wrote: Is it possible to create a function that returns Type like typeof() does? Something such as: Type returnInt(){ return int; } No. A function cannot return a type. A template can evaluate to a type, though: template returnInt(){ alias returnInt = int; } More to the point what is the Type of a type such as int? Types don't have types. You can check if something is a type with an IsExpression: `is(T)` is true if T is a type.
Re: Functions that return type
On Saturday, 16 January 2016 at 21:22:15 UTC, data pulverizer wrote: Is it possible to create a function that returns Type like typeof() does? Something such as: Type returnInt(){ return int; } A type itself isn't a runtime value. I think the closest thing is a TypeInfo object: https://dlang.org/library/object/type_info.html https://dlang.org/spec/expression.html#TypeidExpression