So, fun story: I haven’t updated this blog in forever and a day. (Fun corollary: “forever” is 292 days in my world.)
Basically, other stuff came up (new job, life stuff, blah blah) and Effes got put on the backburner for a while. I started revisiting it about a month ago, a couple hours a week, and I’m now more or less officially back on the project.
Generics are… done? Well, not done, but far enough along that I feel comfortable moving on to other things. The syntax is a bit clunky because I don’t have type inference yet (so, maybeInt = Maybe[Int](5)
instead of maybeInt = Maybe(5)
), and methods can’t declare generic parameters. I’m convinced that what I have will be a good basis for those, though.
The whole exercise was more challenging than I expected. My code ended up being confused as to when a type was reified, and in the end, I went with the approach that a type is always considered reified, but can be “re-reified” at will. That is, Foo[T]
is considered reified to the generic type T on Foo
, but that can be re-reified to map T on Foo
to, say, Int
to produce Foo[Int]
.
So, I’m going to leave generics not-quite-finished and move on to other projects. My next one is built-in types. Despite the examples above, you can’t actually declare or instantiate integers yet — or strings, floats or any other primitive type. (The only thing close to a primitive you can use today is a Boolean, and that’s because it’s just a disjunction of two normal, no-arg types, True
and False
.) The lack of primitive types makes for some un-interesting tests (maybeTrue = Maybe[True](True)
… Zzzzz), which is as good a motivator as any to get things done.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.