On Wed, Dec 9, 2015 at 12:50 PM, milktrader <milktra...@gmail.com> wrote:
> Can you provide a Foo example of how this works, with both construction and
> method definition?

julia> type Foo
       end

julia> Base.(:+)(::Foo, x) = x
+ (generic function with 175 methods)

julia> Foo() + 1
1

julia> Foo() + "bar"
"bar"


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