Re: Functions that return type

2016-01-20 Thread thedeemon via Digitalmars-d-learn

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

2016-01-20 Thread BLM768 via Digitalmars-d-learn

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

2016-01-20 Thread burjui via Digitalmars-d-learn

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

2016-01-19 Thread Timon Gehr via Digitalmars-d-learn

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

2016-01-19 Thread blm768 via Digitalmars-d-learn

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

2016-01-17 Thread data pulverizer via Digitalmars-d-learn

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

2016-01-16 Thread Timon Gehr via Digitalmars-d-learn

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

2016-01-16 Thread Ali Çehreli via Digitalmars-d-learn

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

2016-01-16 Thread data pulverizer via Digitalmars-d-learn
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

2016-01-16 Thread rsw0x via Digitalmars-d-learn
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

2016-01-16 Thread data pulverizer via Digitalmars-d-learn
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

2016-01-16 Thread data pulverizer via Digitalmars-d-learn
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

2016-01-16 Thread anonymous via Digitalmars-d-learn
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

2016-01-16 Thread sarn via Digitalmars-d-learn
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