Along the projection/co-algebra lines (I actually didn't know that's what
they were called until today :) yay for learning new things!)
How about something like this:
-- Define prototypes for your class of actions here
data Actor = Actor {pos::Vector2 Float, move::Vector2 Float - Actor}
--
Opps, errors, it should be more like:
moveBall (Vector2 x y) (Ball ...) = ...
movePaddle (Vector2 x y) (Paddle ...) = ...
-- selection actions for Ball
instance Actor Ball where
mkActor this = let
pos' = getBallPosition this
move' v = mkActor $ moveBall v this
in Actor pos' move'
I'm not sure if I understand what you mean with this co-algebraic approach,
but I guess you mean that functions - like move - don't work directly on any
datatype; you need to provide other functions that give access to the data.
But that's basically what type classes do no? And that's also related
I guess this is related to the expression problem.
Suppose I have a datatype
*data Actor = Ball ... | Paddle ... | Wall ...*
and a function
*move (Ball ...) = *
*move (Paddle ...) = *
*move (Wall ...) = *
in Haskell one must put *Actor* and *move* into a single file.
This is rather cumbersome
Hi Peter,
sounds to me you want to have a look at Open Data Types and Open
Functions by Andres Löh and Ralf Hinze:
http://people.cs.uu.nl/andres/OpenDatatypes.pdf
Cheers,
/Niklas
On Wed, Sep 30, 2009 at 5:54 PM, Peter Verswyvelen bugf...@gmail.com wrote:
I guess this is related to the
On Wed, Sep 30, 2009 at 8:54 AM, Peter Verswyvelen bugf...@gmail.comwrote:
I guess this is related to the expression problem.
Actually, this is exactly the expression problem :)
Suppose I have a datatype
*data Actor = Ball ... | Paddle ... | Wall ...*
and a function
*move (Ball ...) =
On Wed, Sep 30, 2009 at 9:54 AM, Peter Verswyvelen bugf...@gmail.com wrote:
I guess this is related to the expression problem.
Suppose I have a datatype
data Actor = Ball ... | Paddle ... | Wall ...
and a function
move (Ball ...) =
move (Paddle ...) =
move (Wall ...) =
in Haskell one must