Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

> This would require macros or runtime type introspection.

Not if you structure your data using an appropriate data structure, like a map. After all, this is all structs in dynamic languages are.

> A specific example might be "serialize this json type without having to annotate the fields with how to serialize them".

Aeson does this safely and statically using Haskell's powerful static Generics.

    data Foo = Bar Int String deriving (Generic)
    instance FromJSON Foo
    instance ToJSON Foo
You can get named fields like

    data Foo = Bar {baz :: Int, qux :: String}


True, but "batshit conservatives" won't do that, or will mess themselves if you do that, rather than making some kind of "Object-Whatever-Mapping" model and annotations.

But that's what I would do (at least in Java) for this kind of transient transfer object, if left to my own devices.

https://plus.google.com/110981030061712822816/posts/KaSKeg4v...

(I would put myself in the "moderate liberal" camp, even if the languages Steve Yegge lists for that group are not my choice languages)


Most static typing systems have no parallel to 'deriving', which is to my understanding compile-time computation (aka a macro).


"deriving" is compile time; "Generic" is runtime inspection of the shape of a value (in terms of constructor applications). Something (at least vaguely) similar to Generic exists in many statically typed languages - including (IIRC, IIUC) Java and Go.


> Something (at least vaguely) similar to Generic exists in many statically typed languages - including (IIRC, IIUC) Java and Go.

Sure—but it's in spite of static typing, not because of it. You certainly give up any guarantees of avoiding runtime errors by detecting typing issues at compile time.


Sure, it's orthogonal to static typing (I wouldn't quite say "in spite of"). I wasn't trying to weigh in on the general topic, just to clarify what was happening where.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: