copy now basically works :-)
WIP: trying to convince it to allow calling `copy` from `ize`
okay, so I added some more comments to the effect that when
we can deduce p and ts from Map p ts we get rid of most duplication.

It boils down to injective type families :-(
use the `undefined` trick to peel off type layers
ListCons in non-merging style
ListCons, merging style :-)
Merging lists work:

> diffM (return [True]) (return [True]) :: EditScript (BFam (E IO)) (E IO [Bool]) (E IO [Bool])
Cpy ![False] $ Cpy False $ Ins [] $ Del [] $ End

(I'll fix the non-merging empty list now)
resolve the Nil comparison problem, but something is fishy:

Diff> diffM (return [False, True]) (return [True, False]) :: EditScript (BFam (E IO)) (E IO [Bool]) (E IO [Bool])
Cpy ![False] $ Cpy False $ Cpy [] $ End
patch works now!

> patch (diff [False, True] [True, False] :: EditScript (BFam (E IO)) [Bool] [Bool]) [False, True]
[True,False]