On Tue, Mar 31, 2009 at 11:44 PM, wren ng thornton <[email protected]> wrote:
> Another tricky thing for this particular example is answering the question
> of what you want to call the "focus". Usually zippered datastructures are
> functors, so given F X we can pick one X to be the focus and then unzip the
> F around it.
The functor part isn't important. You can make a zipper from any
recursive structure.
data Expr = Var String | Lit Int | App Expr Expr | Abs String Expr
data ExprCtx = AppC1 Expr | AppC2 Expr | AbsC String
data ExprZ = ExprZ { ctx :: [ExprCtx], focus :: Expr }
In general, if I have a type T and functors F and F' such that T is
isomorphic to F T and F' is the derivative of F, then ([F' T], T) is a
zipper for T.
--
Dave Menendez <[email protected]>
<http://www.eyrie.org/~zednenem/>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe