I should probably submit a PR to add - the extra info 

On Friday, September 18, 2015 at 8:50:35 AM UTC-4, Tomas Lycken wrote:
>
> In this specific use case I don't need to handle anonymous functions, so 
> `Base.return_types` will probably do just fine.
>
> It's not documented, though, so searching in the docs didn't turn anything 
> up (and even though I guess it must have been used on this list, my search 
> terms apparently weren't good enough to find it.
>
> Thanks!
>
> // T
>
> On Friday, September 18, 2015 at 2:42:47 PM UTC+2, Michael Francis wrote:
>>
>> Yes in the sense it hands anon functions
>>
>> On Friday, September 18, 2015 at 8:41:16 AM UTC-4, Mauro wrote:
>>>
>>> Is that better than Base.return_types ? 
>>>
>>> On Fri, 2015-09-18 at 14:36, Michael Francis <[email protected]> 
>>> wrote: 
>>> > function returns(f, types) 
>>> >   rt = [] 
>>> >   if( !isdefined(f, :code) ) 
>>> >     for x in Base._methods(f,types,-1) 
>>> >         linfo = x[3].func.code 
>>> >         (tree, ty) = typeinf(linfo, x[1], x[2]) 
>>> >         push!(rt, ty) 
>>> >     end 
>>> >   else 
>>> >     # It is a lambda, not a function, we also need the types of the 
>>> bound 
>>> >     # variables to evaluate the lambda corectly 
>>> >     println( types ) 
>>> >     linfo = f.code 
>>> >     env = f.env 
>>> >     (tree, ty) = typeinf(linfo, types, () ) 
>>> >     push!(rt, ty) 
>>> >   end 
>>> >   # If there is a set of return types we default to any for now 
>>> >   # this could be converted to a union type 
>>> >   if( length( rt ) == 0 ) 
>>> >     println( "Failed to resolve return type for $f, $types") 
>>> >   elseif( length(rt) > 1 ) 
>>> >     return Any 
>>> >   else 
>>> >     return rt[1] 
>>> >   end 
>>> > end 
>>> > 
>>> > 
>>> > 
>>> > The above is what I do - which also copes with anon-functions 
>>> > 
>>> > On Friday, September 18, 2015 at 8:32:45 AM UTC-4, Tomas Lycken wrote: 
>>> >> 
>>> >> Given a function `foo(x,y)` and two *types* `TX` and `TY`, is there a 
>>> way 
>>> >> I can get the inferred return type from calling `foo(x::TX, y::TY)`? 
>>> I want 
>>> >> to do this in the compile part of a generated function, so I don't 
>>> have 
>>> >> access to any values to actually call the function with. 
>>> >> 
>>> >> I have already verified that the function `foo` is type stable, so 
>>> the 
>>> >> inferred type should be good enough for my purposes. 
>>> >> 
>>> >> Thanks, 
>>> >> 
>>> >> // T 
>>> >> 
>>>
>>>

Reply via email to