if anyone ever finds this thread via google, the simplest way i've found of 
checking what is a valid type is to use Val{}.  if Val{x} doesn't throw an 
exception then x can be used as part of a type (the functions linked to 
earlier are in C).

since tuples can contain data types, bits types, and nested tuples, you can 
encode pretty much any value in "s-expressions" of tuples, where the first 
value is a data type and subsequent values are arguments.

andrew


On Thursday, 9 July 2015 12:15:29 UTC-3, andrew cooke wrote:
>
>
> sure, i understand the reasoning, i just didn't know it was actually 
> implemented / verified in any way.  rewriting the code now...  cheers, 
> andrew
>
> On Thursday, 9 July 2015 12:03:57 UTC-3, Yichao Yu wrote:
>>
>> On Thu, Jul 9, 2015 at 10:59 AM, andrew cooke <and...@acooke.org> wrote: 
>> > 
>> > ah!  thank-you.  i had no idea about that. 
>> > 
>> > is there any kind of isbits container?  will a tuple work? 
>>
>> The type system uses === to compare the parameters (and it has to be 
>> this way since it should be simple) so having a reference to a mutable 
>> should never work. If you want an array of `isbits` as parameter, an 
>> tuple of it should work on 0.4 
>>
>>
>> Another way to see why a vector should never work is that e.g. you have 
>>
>> a = [1, 2] 
>> T1 = A{a} 
>> push!(a, 3) 
>> T2 = A{an} 
>> T3 = A{[1, 2]} 
>> T4 = A{[1, 2]} 
>>
>> Should any of the T*'s be equal? 
>>
>>
>> > 
>> > thanks again, 
>> > 
>> > andrew 
>> > 
>> > 
>> > On Thursday, 9 July 2015 11:56:45 UTC-3, Yichao Yu wrote: 
>> >> 
>> >> On Thu, Jul 9, 2015 at 10:52 AM, andrew cooke <and...@acooke.org> 
>> wrote: 
>> >> > I want to do what I wrote, I think!  In particular, the type 
>> parameter 
>> >> > is 
>> >> > itself a value, the polynomial x.  It's immutable and a subclass of 
>> >> > Integer. 
>> >> > So I have no idea why the code should not work. 
>> >> 
>> >> It's not `isbits` though. 
>> >> 
>> >> > 
>> >> > It's unusual to have a complex value like that in a type, I know, 
>> but it 
>> >> > makes logical sense here - it's the type of values in the quotient 
>> ring 
>> >> > with 
>> >> > that ideal. 
>> >> > 
>> >> > Andrew 
>> >> > 
>> >> > 
>> >> > 
>> >> > On Thursday, 9 July 2015 11:44:42 UTC-3, Tom Breloff wrote: 
>> >> >> 
>> >> >> I'm not 100% sure I understand what you want, but here's a stab for 
>> >> >> line 
>> >> >> 16: 
>> >> >> 
>> >> >> ZField{T1.parameters[1],T2}(x) 
>> >> >> 
>> >> >> 
>> >> >> On Thursday, July 9, 2015 at 10:32:28 AM UTC-4, andrew cooke wrote: 
>> >> >>> 
>> >> >>> 
>> >> >>> Before I raise an issue I wondered if I've made some stupid 
>> mistake 
>> >> >>> here. 
>> >> >>> The code is about as simple as I can make it.  The idea behind 
>> things 
>> >> >>> is 
>> >> >>> that you have a field of integers module 2 (GF2).  Then over that 
>> you 
>> >> >>> define 
>> >> >>> polynomials.  And then you can define a Quotient Ring with the 
>> >> >>> polynomials, 
>> >> >>> which is analogous to the initial field, and so you can use the 
>> same 
>> >> >>> type as 
>> >> >>> the rogiinal field.  But you don't need to understand that! 
>> >> >>> 
>> >> >>> Here's the code: 
>> >> >>> 
>> >> >>> immutable ZField{N, I<:Integer} <: Integer 
>> >> >>>     i::I 
>> >> >>> end 
>> >> >>> 
>> >> >>> immutable ZPoly{I<:Integer} <: Integer 
>> >> >>>     a::Vector{I} 
>> >> >>> end 
>> >> >>> 
>> >> >>> T1 = ZField{2,Int} 
>> >> >>> o = T1(1) 
>> >> >>> 
>> >> >>> T2 = ZPoly{T1} 
>> >> >>> x = T2([o, o]) 
>> >> >>> 
>> >> >>> ZField{x,T2}(x) 
>> >> >>> 
>> >> >>> And this is the error (from the last line, which is line 16) 
>> >> >>> 
>> >> >>> andrew@laptop:~> julia-trunk IntModN.jl 
>> >> >>> ERROR: LoadError: TypeError: apply_type: in ZField, expected 
>> Int64, 
>> >> >>> got 
>> >> >>> ZPoly{ZField{2,Int64}} 
>> >> >>>  in include at ./boot.jl:254 
>> >> >>>  in include_from_node1 at loading.jl:133 
>> >> >>>  in process_options at ./client.jl:305 
>> >> >>>  in _start at ./client.jl:405 
>> >> >>> while loading /home/andrew/IntModN.jl, in expression starting on 
>> line 
>> >> >>> 16 
>> >> >>> 
>> >> >>> In short - I have no idea where the Int64 comes from. 
>> >> >>> 
>> >> >>> Thanks, 
>> >> >>> Andrew 
>> >> >>> 
>> >> > 
>>
>

Reply via email to