Category Archives: Types

Type safety, Validation and verification

Ad-Hoc External State Models

Encapsulation, Accessibility, Security One of the main reasons we encapsulate state is to gain more control over how it updates. For example, take your traditional, imperative, mutable state variables that respond to get and put actions. We might use one … Continue reading

Posted in Concurrency, Language Design, Modularity, Open Systems Programming, Reactive Demand Programming, State, Types | 1 Comment

Stone Soup Programming

Stone soup programming is meant to evoke an image of throwing software components into a pot – in no particular order, and paying little attention to the ingredients – and the result being a nice application. The glue code between … Continue reading

Posted in Language Design, Live Programming, Modularity, Reactive Demand Programming, Stability, Types | 6 Comments

Exponential Decay of History

There are many problems for which it is useful to keep a history. A few examples of such problems: keep history of control-flow in an application for debugging purposes keep history of updates to a document for undo purposes keep … Continue reading

Posted in Language Design, Stability, State, Types, User Interface | 3 Comments

Make for Haskell values, part alpha

…Make is a monad transformer… I commanded Google to search the web on my behalf for word of Dependency Injection in Haskell. I was disappointed to see only a few ruminations on using typeclasses. Inflexible, static, global typeclasses. Impenetrability! That’s … Continue reading

Posted in Language Design, Modularity, Open Systems Programming, Types | Leave a comment

Freedom and Crutches in Language Design

Language designers aim to optimize an experience for their prospective users, but the criteria and heuristics by which they ‘optimize’ are widely varied and inconsistent (often within a single designer). In this article, I’ll present two common points of contention … Continue reading

Posted in Language Design, Types | 19 Comments

Trouble with Typestate

If you are unfamiliar with it, typestate is a property explored by several new general purpose programming languages such as Plaid and Rust. The idea is to lift object states into the type system – i.e. initialization status, or whether … Continue reading

Posted in Language Design, Types | Leave a comment

Linear Types and RDP?

I’ve been thinking recently about how I might achieve linearity types for RDP. A type is ‘linear’ if it must be consumed at least once… and at most once. Linear types are very useful. They can be used to enforce … Continue reading

Posted in Language Design, Reactive Demand Programming, State, Types | 2 Comments

Signals in RDP

Reactive Demand Programming (RDP) describes behavior as signal transformers, in continuous time, with side-effects. For example, I might push a control signal to a camera (to influence pan, zoom, tilt, and focus), and the camera will provide a response signal … Continue reading

Posted in Concurrency, Distributed Programming, Language Design, Reactive Demand Programming, Types | 2 Comments

Protect Your Semantics

A FIFO is a valid strategy to implement actors model, in the sense that it doesn’t violate any actors model semantics. But there are serious problems with using this strategy: developers will test their programs with it and never see … Continue reading

Posted in Language Design, Types | Leave a comment