implementation module get_dictionary import StdEnv import StdDynamic :: TVD a = CVD a & get_dictionary a :: TD a = CD & get_dictionary a cvd_to_td :: (TVD a) -> TD a; cvd_to_td (CVD a) = CD; select_dictionary :: ![Int] !(TVD a) -> Dynamic select_dictionary s d=:(CVD _) = get_dictionary s (cvd_to_td d) class get_dictionary a | TC, Eq a :: ![Int] !(TD a) -> Dynamic instance get_dictionary Int where get_dictionary [] x = dynamic x instance get_dictionary (a,b) | get_dictionary a & get_dictionary b where get_dictionary [] x = dynamic x get_dictionary [e:s] x | e==0 = get_dictionary s (f0 x) | e==1 = get_dictionary s (f1 x) where f0 :: (TD (a,b)) -> TD a | get_dictionary a f0 CD = CD f1 :: (TD (a,b)) -> TD b | get_dictionary b f1 CD = CD instance get_dictionary [a] | get_dictionary a where get_dictionary [] x = dynamic x get_dictionary [0:s] x = get_dictionary s (f x) where f :: (TD [a]) -> TD a | get_dictionary a f CD = CD Start # v = CVD ((0,[1]),2) # d0 = select_dictionary [] v # d1 = select_dictionary [0] v # d2 = select_dictionary [0,1] v # d3 = select_dictionary [0,1,0] v = (d0,'\n',d1,'\n',d2,'\n',d3)