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

2. How to write methods that use this type in a meaningful way.

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