I was wondering if there anyone had any rules of thumb for when to create 
parametric types of a parametric types (if this is even possible?).

To give a concrete example, I was messing around to describe/implement 
elliptic curve point addition:

# ring of integers mod P
immutable Z{P} <: PAdicInteger
  val::Integer

  Z(val) = new(mod(val, P))
end 

 

immutable EC{P}  # elliptic curve
  a::Z{P}
  b::Z{P}
  f::Function

  EC(a, b) = new(a, b, x -> Z{P}(x^3 + a*x + b))
end 


Which works great (and I can add some neat methods cleanly), however I then 
want a type dependent on an elliptic curve, the solutions of that curve (so 
I can define addition), something like:

immutable ECPoint{EC{P}}
  x::Z{P}
  y::Z{P}

  ECPoint(x, y) = y^2 == EC.f(x) ? new(x, y) :
                                                  error("($x,$y) not a 
solution of $EC")
end


This doesn't compile. I can put the EC as an attribute (and assert I'm 
using equal ECs in every method), but to me it seems "nicer" to rely on the 
type system.
Is there a trick here for types dependant of parametric types? Am I just 
thinking about this "wrong"?

Best,
Andy

p.s. no doubt I'm reinventing the julia wheel with p-adics and elliptic 
curves... :)

Reply via email to