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? > >> > >> > > >