`⟦m⟧`

” instead as “`μ m`

” may help clarify. Then
]]>Since you seem to still update this paper occasionally, here’s a typo I noticed: In the end of section 5.2 on page 5, in the equation [[fmap f m]] = fmap f [[m]], I’m pretty sure fmap f [[m]] should be the composition fmap f ◦ [[m]] – so the expression can type check and be consistent with the following line.

]]>I think the (a -> b -> c) in the type of ‘unionMb’ should be removed. (In the end of section 3 on page 3)

Shouldn’t the ‘ma’ and ‘mb’ be introduced in the lhs of the methods of the semantic instance Monoid (TMap k v) (In section 5, page 4)?

I think it would benefit the paper to mention (without explanation) categorical concepts as they apply. For instance, it seems that untrie (creating a suspension) is left adjoint to trie (deep seq). So hyperstrict would be the natural transformation epsilon. Also, section 1.11 seems like too much to tackle in a paper of this scope. You would need to explain the role of functor strength and costrength (aren’t those just the laws you listed in the seconnd equation there?) And the Hm. note begs for mention of a universal property.

It seems like the basic thrust of your argument is how to create a type class (interface) that is left-adjoint to the forgetful functor mapping an implementation to its denotational semantics (in the sense that any valid imstance must not only satisfy the meaning of the canonical instance but also have no extra meaning beyond it). This interface then (uniquely, up to isomorphism) tells “the truth, the whole truth, and nothing but the truth” about the abstract data type, which is effectively the above-mentioned epsilon natural trnansformation applied to the concrete data type. Words like this up front may help readers orient themselves.

Finally, the role of bottom seems to be central to the examples, with the goal of design to manifest the role of bottomn om the interface, instead of leaving each imstance free to treat it independently. Is this the main problem you see in interfaces today?

I notice you did not include Danielsson et al, 2006. “Fast and loose reasoning is morally correct.” in your references, but it seems relevant to your paper.

Also, in Related Work, you might consider Hagino’s dissertation 1987, “A Categorical Programming Language”. It seems to break functors into adjoint pairs (as I alluded to above) to more explicitly expose the role of strictness as I alluded to above. I may be way off base on this, because Hagino’s work is somewhat beyond my reach.

]]>