archives

An Algebraic Theory of Polymorphic Temporal Media

Paul Hudak, An Algebraic Theory of Polymorphic Temporal Media

Temporal media is information that is directly consumed by a user, and that varies with time. Examples include music, digital sound files, computer animations,and video clips. In this paper we present a polymorphic data type that captures a broad range of temporal media. We study its syntactic, temporal, and semantic properties, leading to an algebraic theory of polymorphic temporal media that is valid for underlying media types that satisfy specific constraints. The key technical result is an axiomatic semantics for polymorphic temporal media that is shown to be both sound and complete.

The theoretical incarnation of Haskore.

Completeness is proved by establishing the existence of a normal form for polymorphic temporal media values.

What is Universal about the Representation of Color Experience?

A study in the importance of language. We've had posts before that discuss whether and how language shapes experience, but I don't think this paper has appeared.

Only vaguely related to programming, I know, but there is a tradition here for this kind of thing (I hope!). From painquale on mefi.

lazy evaulation and combining user streams

I was looking at the SICP lectures the other day, and in the part on streams he talks about implementing a system with lazy evaluation, then gives as a example of the "dificulty" in combining streams a system that has 2 users entering data, each with their own stream, and something which has to choose which stream to take the next event from, while combining them into one stream. aparently the "problem" is that they try alternating between user streams, but one of the users may not enter anything for a while, causing the system to wait for him to enter something before continuing.

It would seem to me that the problem here is not in the streams, but in the interface to the keyboard. The keyboard sends events. that means a charactor at a specific moment in time. of course normaly the time gets thrown out, but the event itself should be timestamped as the imput stream. This was even mentioned as a question, which he didn't adress very well.

The next part is what should the keyboard stream return while "waiting" for a keystroke? It should return a "constraint object", which contains not a specifc value, but the constraint that the next data objects timestamp is greater then {current moment}. Then when the system goes to compile the streams, it can compile in timestamp order, and whenever it gets one item from one stream, it can just check the other stream to see if its next objects timestamp is greater then the curent object. Then add the first if it is, or add it if it is not.

To start the process there would have to be a "current time" stream which the current time could be pulled from, and then the referened streams would be checked against it.

Starting a stream access without checking if it's timestamp was less then the current time would be a error that would lock the system up till a event was entered. Just like taking the (cdr `()) is a error.

So i don't see the problem. Is there something wrong with what i put forward, or did this problem just get solved after the videos were made (1980's)?