data LinkedTree a
= Root a (LinkedTree a) (LinkedTree a)
| Leaf a (LinkedTree a)
| Branch a (LinkedTree a) (LinkedTree a) (LinkedTree a)
root = Root 1 l r
where
l = Branch 2 ll lr root
r = Leaf 3 root
ll = Leaf 21 l
lr = Leaf 22 l
instance Show a
=> Show (LinkedTree a
) where
left (Root _ l _) = l
left (Branch _ l _ _) = l
right (Root _ _ r) = r
right (Branch _ _ r _) = r
parent (Leaf _ p) = p
parent (Branch _ _ _ p) = p
main = do
let rootLeft = left root
ZGF0YSBMaW5rZWRUcmVlIGEKCT0gUm9vdCBhIChMaW5rZWRUcmVlIGEpIChMaW5rZWRUcmVlIGEpCgl8IExlYWYgYSAoTGlua2VkVHJlZSBhKQoJfCBCcmFuY2ggYSAoTGlua2VkVHJlZSBhKSAoTGlua2VkVHJlZSBhKSAoTGlua2VkVHJlZSBhKQoKcm9vdCA9IFJvb3QgMSBsIHIKCXdoZXJlCgkJbCA9IEJyYW5jaCAyIGxsIGxyIHJvb3QKCQlyID0gTGVhZiAzIHJvb3QKCQlsbCA9IExlYWYgMjEgbAoJCWxyID0gTGVhZiAyMiBsCgppbnN0YW5jZSBTaG93IGEgPT4gU2hvdyAoTGlua2VkVHJlZSBhKSB3aGVyZQoJc2hvdyAoUm9vdCB4IGwgcikgICAgID0gInsiICsrIHNob3cgeCArKyAiICIgKysgc2hvdyBsICsrICIgIiArKyBzaG93IHIgKysgIn0iCglzaG93IChMZWFmIHggXykgICAgICAgPSAieyIgKysgc2hvdyB4ICsrICJ9IgoJc2hvdyAoQnJhbmNoIHggbCByIF8pID0gInsiICsrIHNob3cgeCArKyAiICIgKysgc2hvdyBsICsrICIgIiArKyBzaG93IHIgKysgIn0iCgpsZWZ0ICAgKFJvb3QgICBfIGwgXykgICA9IGwKbGVmdCAgIChCcmFuY2ggXyBsIF8gXykgPSBsCnJpZ2h0ICAoUm9vdCAgIF8gXyByKSAgID0gcgpyaWdodCAgKEJyYW5jaCBfIF8gciBfKSA9IHIKcGFyZW50IChMZWFmICAgXyBwKSAgICAgPSBwCnBhcmVudCAoQnJhbmNoIF8gXyBfIHApID0gcAogCm1haW4gPSBkbwoJcHJpbnQgcm9vdAoJbGV0IHJvb3RMZWZ0ID0gbGVmdCByb290CglwcmludCByb290TGVmdAoJcHJpbnQgJCBwYXJlbnQgcm9vdExlZnQ=