[Haskell] Задачка на тему eDSL.
От: Vintik_69 Швейцария  
Дата: 07.09.09 22:55
Оценка:
Возникла вот такая задачка. Пусть есть тип Rule:

data Rule v where
  Table :: [v] -> Rule v
  Join :: Rule v1 -> Rule v2 -> Rule (v1, v2)

Можно ли сделать так (то есть так определить все недостающее), чтобы выражение вида

r = rule$ do 
  table (arr1 :: [t1])
  table (arr2 :: [t2])
  ...
  table (arrn :: [tn])

транслировалось в

Join
  (Table arr1)
  (Join 
    (Table arr2)
    (Join
      ...
        (Table arrn)))


? Если нельзя, хотелось бы услышать более-менее убедительное обоснование.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.