Can you provide a Foo example of how this works, with both construction and 
method definition?

On Wednesday, December 9, 2015 at 9:32:36 AM UTC-5, Yichao Yu wrote:
>
> On Wed, Dec 9, 2015 at 9:22 AM, milktrader <milkt...@gmail.com 
> <javascript:>> wrote: 
> > I'd like a somewhat clever example (or boring one for that matter) that 
> > shows: 
> > 
> > 1. How to create an instance of a singleton type 
>
> Call the constructor just like any other types. 
>
> The only special thing about singleton type is that two instance of a 
> mutable singleton type are identical. Other than this, they are simply 
> types that doesn't have a field. 
>
> > 
> > 2. How to write methods that use this type in a meaningful way. 
>
> Just like any other types. As long as you are not comparing them, they 
> are exactly the same with everything else. 
>
> > 
> > 3. How it's used in Base code (I seem to recall Void is a singleton 
> type) 
> > 
> > On Wednesday, December 9, 2015 at 9:02:31 AM UTC-5, tshort wrote: 
> >> 
> >> I'm not sure what you want, either. How about this? 
> >> 
> >> julia> type BadInt{X} end 
> >> 
> >> julia> BadInt{3}() 
> >> BadInt{3}() 
> >> 
> >> julia> f{X}(::Type{BadInt{X}}, y) = X - y 
> >> f (generic function with 1 method) 
> >> 
> >> julia> f(BadInt{10}, 3) 
> >> 7 
> >> 
> >> julia> f{X}(::BadInt{X}, y) = X - y 
> >> f (generic function with 2 methods) 
> >> 
> >> julia> f(BadInt{10}(), 3) 
> >> 7 
> >> 
> >> 
> >> On Wed, Dec 9, 2015 at 8:56 AM, Eric Forgy <eric....@gmail.com> wrote: 
> >>> 
> >>> Not sure I follow, but does this help? 
> >>> 
> >>> julia> type BadInt 
> >>>        end 
> >>> 
> >>> julia> bi = BadInt() 
> >>> BadInt() 
> >>> 
> >>> julia> typeof(bi) 
> >>> BadInt 
> >>> 
> >>> 
> >>> On Wednesday, December 9, 2015 at 9:46:01 PM UTC+8, milktrader wrote: 
> >>>> 
> >>>> How do you create an instance of type BadInt then? 
> >>>> 
> >>>> On Wednesday, December 9, 2015 at 7:01:25 AM UTC-5, milktrader wrote: 
> >>>>> 
> >>>>> Trying to wrap my mind around singleton types to see if they might 
> be 
> >>>>> useful for something I'm working on, but running into some 
> confusion. Here 
> >>>>> is an example that I started working with: 
> >>>>> 
> >>>>> julia> type BadInt 
> >>>>>        end 
> >>>>> 
> >>>>> julia> import Base.+ 
> >>>>> 
> >>>>> julia> +(x::BadInt, y::Int64) = x - y 
> >>>>> + (generic function with 172 methods) 
> >>>>> 
> >>>>> julia> BadInt() = 2 
> >>>>> BadInt 
> >>>>> 
> >>>>> julia> BadInt + 2 
> >>>>> ERROR: MethodError: `+` has no method matching +(::Type{BadInt}, 
> >>>>> ::Int64) 
> >>>>> Closest candidates are: 
> >>>>>   +(::Any, ::Any, ::Any, ::Any...) 
> >>>>>   +(::Int64, ::Int64) 
> >>>>>   +(::Complex{Bool}, ::Real) 
> >>>>>   ... 
> >>>>> 
> >>>>> As I understand, a singleton type can only take on a single value. 
> >>>>> What's the utility in supporting this? 
> >> 
> >> 
> > 
>

Reply via email to