``````
import Text.Show.Functions

data BinTree a b = Leaf b | Node a (BinTree a b) (BinTree a b) deriving Show

example :: BinTree (Int -> Bool) Char

example = Node (x -> x > 4) (Node (x -> x * x == x) (Leaf 'g') (Node (x -> x == 0)

(Leaf 'u') (Leaf 'l'))) (Node (x -> x >= 7) (Leaf 'f') (Leaf 'i'))

countInnerNodes :: BinTree a b -> Int

countInnerNodes (Node a b c) = 1 + countInnerNodes b + countInnerNodes c

countInnerNodes (Leaf x) = 0

decodeInt :: BinTree (Int -> Bool) b -> Int -> b

decodeInt (Leaf b) p = b

decodeInt (Node x y z) p = if (x(p) == True) then decodeInt z p else decodeInt y p

decode :: BinTree (Int -> Bool) b -> [Int] -> String

decode x [] ="empty list"

decode x xs = ??????

``````

``````
decode Tree [1,2,3,4]

= [decodeInt Tree (1), decodeInt Tree (2),

decodeInt Tree (3), decodeInt Tree (4)]

``````

`decodeInt :: BinTree (Int -> Bool) b -> Int -> b`那么假设`t :: BinTree (Int -> Bool) b`那就`decodeInt t :: Int -> b`将该函数映射到`Int` s列表上。

``````
decode t xs = let y = map (decodeInt t) xs

in ...

``````