The articles are coming thick and fast now!

http://grahamhackingscala.blogspot.com/2010/01/why-your-company-should-let-you-use.html


<http://grahamhackingscala.blogspot.com/2010/01/why-your-company-should-let-you-use.html>

2010/9/2 Kevin Wright <[email protected]>

> If a thing can be done, then it WILL be done, there's always going to be
> somebody out there perverse enough to try it
> Almost any tool is open to abuse.  The more flexible it is, the more
> abusable it becomes:
>
> http://thereifixedit.failblog.org/
>
> C++ templates for example, while a long time favourite of obfuscation
> contests, have also resulted in some amazing work:
> http://www.boost.org/doc/libs/
>
>
> You'll not be surprised to hear that Scala's type system is no different in
> this regard.
>
> Broadly speaking, there are two important concepts really being explored by
> more experienced Scala users; Google on either of these terms with scala,
> and you'll come up with a wealth of links:
>
> "type classes" : http://en.wikipedia.org/wiki/Type_class
> <http://en.wikipedia.org/wiki/Type_class>and "kinds" :
> http://en.wikipedia.org/wiki/Kind_(type_theory)
>
>
> One example of a type class is scala.Numeric, which allows you to define an
> algorithm in such a way that it'll operate over ANY type capable of a few
> simple operations (plus, minus, divide, etc.) and do so in a completely
> type-safe manner, without need of duck typing, etc.
>
> This is an EXTREMELY powerful abstraction, once you consider that concepts
> such as matrices, complex numbers, waveforms, linear equations, etc. can all
> be added/subtracted/whatever and so can be considered Numeric.
>
>
> Kinds are one level of abstraction up from types.  For example, List can be
> seen as a Kind * -> * i.e. it takes a type (e.g. Int) and yields a type
> (e.g. List[Int]).  Map is * -> * -> * (takes two types, and yields one).  In
> terminology, you'll often see List described as a type constructor, whereas
> List[Int] is a Type.  List is absolutely not a raw type, Scala doesn't have
> such things!
>
> Scala allows you to generically define an algorithm so that it'll operate
> over a particular Kind (not just a specific type).
> scalaz, for example, defines a number of operations that can operate over
> anything of kind * -> *
>
> http://scalaz.googlecode.com/svn/continuous/latest/browse.sxr/scalaz/MA.scala.html
> (disclaimer: This is bleeding edge, brain melting, academic stuff of the
> sort that scares people off, it is absolutely NOT day-to-day Scala so please
> don't let it put you off!  It does however show how far things can be pushed
> if you are so minded, not unlike C++ templates then)
>
>
> And a few more interesting links, hopefully a lot more approachable than
> scalaz :)
>
>
> Quick interview with Bill Venners and Martin Odersky:
> http://www.artima.com/scalazine/articles/scalas_type_system.html
>
> Collection of articles on metaprogramming with types:
> http://apocalisp.wordpress.com/2010/06/08/type-level-programming-in-scala/
>
> presentation on type classes:
> http://lampwww.epfl.ch/~odersky/talks/wg2.8-boston06.pdf
>
> Generics of a Higher Kind:
> http://people.cs.kuleuven.be/~adriaan.moors/files/genericshk/tcpoly.pdf
>
> video and slides on "High wizardry in the Land of Scala", covering type
> classes and Kinds::
> http://vimeo.com/13518456
>
> SO question illustrating a practical application of the Numeric type class:
>
> http://stackoverflow.com/questions/1252915/scala-how-to-define-generic-function-parameters
>
>
>
>
>
> 2010/9/2 Cédric Beust ♔ <[email protected]>
>
>
>>
>> On Thu, Sep 2, 2010 at 2:20 PM, Graham Allan <[email protected]
>> > wrote:
>>
>>> One thing that the page doesn't include (AFAICT) is a discussion of what
>>> you
>>> have referred to elsewhere on this mailing list as a 'Turing-complete
>>> type
>>> system'.
>>>
>>
>> It's the kind of feature that enables hacks such as this 
>> one<http://en.wikibooks.org/wiki/C%2B%2B_Programming/Templates/Template_Meta-Programming>.
>> If you don't feel like reading it, somebody managed to create C++ templates
>> which, when fed to the compiler, will produce error messages that list prime
>> numbers.
>>
>> It's awesomely clever but why you would put this as a requirement to
>> choosing a language is beyond me. If you don't think that this makes a
>> language complex, you are probably hanging out with people who love Haskell
>> and who can tell you the difference between a catamorphism and an
>> anamorphism in their sleep.
>>
>> --
>> Cédric
>>
>>
>>
>
>
> --
> Kevin Wright
>
> mail / gtalk / msn : [email protected]
> pulse / skype: kev.lee.wright
> twitter: @thecoda
>
>


-- 
Kevin Wright

mail / gtalk / msn : [email protected]
pulse / skype: kev.lee.wright
twitter: @thecoda

-- 
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.

Reply via email to