More type design questions

Andrew J Bromage
Wed, 20 Aug 2003 11:11:01 +1000

G'day all.

On Tue, Aug 19, 2003 at 12:31:08PM +0200, Konrad Hinsen wrote:

> Under what conditions would Haskell programmers make some type an instance of 
> Functor? Whenever it could possibly be done (i.e. whenever fmap makes sense)? 
> Or just when fmap would be used frequently for some type?

Like anything else in software development, it's a judgement call.

The questions you have to ask might include:

	- Does it make sense?
	- Is it an appropriate abstraction for this type?
	- Would I want to encourage another programmer to use it?
	- Do I want to use it myself?
	- Would it unnecessarily limit the possible implementations of
	  this abstract type?

The last point is particularly important to consider.  A Set-like type,
for example, is mathematically a functor, but any implementation of
fmap will in general change the relative orderings, hash values etc of
member elements.  This means that supporting fmap efficiently might
rule out many interesting implementations of this container.

If in doubt, don't implement it (yet).

Andrew Bromage