Skip to content

Instantly share code, notes, and snippets.

@fumieval
Created June 23, 2012 02:47
Show Gist options
  • Save fumieval/2976453 to your computer and use it in GitHub Desktop.
Save fumieval/2976453 to your computer and use it in GitHub Desktop.
data Token = Brace Int | Angle Int | Error | T String
transform :: [Token] -> [Int] -> [Token]
transform (Angle n:ts) (m:ms)
| m == n = T ";" : (transform ts (m:ms))
| n < m = T "}" : (transform (Angle n:ts) ms)
transform (Angle n:ts) ms = transform ts ms
transform (Brace n:ts) (m:ms) | n > m = T "{" : transform ts (n:m:ms)
transform (Brace n:ts) [] | n > 0 = T "{" : transform ts [n]
transform (Brace n:ts) ms = T "{" : T "}" : transform (Angle n:ts) ms
transform (T "}":ts) (0:ms) = T "}" : (transform ts ms)
transform (T "}":ts) ms = Error
transform (T "{":ts) ms = T "{" : transform ts (0:ms)
transform (t:ts) (m:ms) | t == Error && m /= 0 = T "}" : transform (t:ts) ms
transform (t:ts) ms = t : (transform ts ms)
transform [] [] = []
transform [] (m:ms) | m /= 0 = T "}" : transform [] ms
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment