Árbol binario de Haskell con solo caracteres

Digamos que hago mi árbol así

data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show, Read, Eq)

Pero quiero hacer un árbol que use solo caracteres. No necesito que sea una plantilla. Sé que mi árbol solo usará caracteres si lo hago como el de arriba que no puedo hacer if dataOfNode == ')' en una función porque dice que es un tipo [char] y espera un tipo [a].

Cómo hacer un árbol que usaría solo caracteres o hay alguna manera de hacer este tipo de verificación dataOfNode == ')' con este tipo de árbol que le di. ¿Me puede dar un breve ejemplo de una función que, digamos, verifique si los datos en este nodo son el signo ')'?

Edit:
Según lo solicitado, estoy publicando la función que me gustaría hacer `

buildTreeHelper :: (Ord a) => String -> a -> Int -> String -> Tree a -> Tree a
buildTreeHelper str blank turn path t
 | str == [] = t
 | front == '(' = buildTreeHelper (tail str) blank 1 ('L':path) (expandTree (reverse path) blank t)
 | front == ')' = buildTreeHelper (tail str) blank 2 (tail path) t
 | turn == 1 = buildTreeHelper (tail str) blank 2 (tail path) (expandTree (reverse path) front t)
 | turn == 2 = buildTreeHelper (tail str) blank 3 ('R':path) (expandTree (reverse path) front t)
 | turn == 3 = buildTreeHelper (tail str) blank 2 (tail path) (expandTree (reverse path) front t)
 where 
  front = head str

Lógicamente no está terminado pero tampoco lo puedo usar porque lleva un string el cual voy desviando char por char. Es por eso que estoy seguro de que quiero hacer mi árbol solo a partir de caracteres para poder reemplazar type a type char al comienzo de la función. También tiene otros errores, pero creo que la idea principal está clara.

preguntado el 05 de febrero de 14 a las 17:02

Incluya el código que probó que no funcionó. -

Ok, lo editaré en 2 minutos. -

templates etiqueta junto con haskell podría dar lugar a malentendidos. reemplazándolo con type-variables -

No incluyes la definición de expandTree, por lo que no es posible estar seguro, pero noto que a veces llamas expandTree con un argumento de blank (que es un tipo especificado por la persona que llama) y, a veces, lo llaman con un argumento de front (el cual es un Char). Estos no son obviamente del mismo tipo, y es probablemente la fuente de la queja de GHC. -

Sí, tiene usted razón. Lo hice así porque quería tener más claro dónde está el problema. Blank también es un carácter constante y no puede ser otra cosa, así que lo cambié también al tipo 'char' y funciona bien. -

1 Respuestas

Fácilmente podría reemplazar su definición de tipo con

data Tree = EmptyTree | Node Char Tree Tree deriving (Show, Read, Eq)

o especializarte solo en tu función definiéndola como

buildTreeHelper :: String -> Char -> Int -> String -> Tree Char -> Tree Char

Respondido 05 Feb 14, 17:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.