import List
import Ticket hiding (trees)

-- 練習問題 4 の解答例

trees :: [Char] -> [Char] -> [Term]
trees ds os = [ t | (_,t) <- trees' ds os ]

trees' :: [Char] -> [Char] -> [([Char],Term)]
trees' [c] os = [(os, Val c)]
trees' ds  os = concat [ odtree os xs ys | (xs,ys) <- splits1 ds ]

odtree :: [Char] -> [Char] -> [Char] -> [([Char],Term)]
odtree os ls rs 
 = [ (os'', App o l r) | (o:os',l) <- trees' ls os, (os'',r) <- trees' rs os' ]

