data ITree a = 
    Leaf (Int -> a) | Node [ITree a]

instance Functor ITree where
    fmap f (Node x) = Node (fmap (fmap f) x)
    fmap f (Leaf x) = Leaf (f.x)