Advertisement
Guest User

GADTs

a guest
Feb 17th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {-# LANGUAGE GADTs #-}
  2.  
  3. module Main where
  4.  
  5. data PR t a = PR (Maybe ([t], a))
  6. data P  t a = P  ([t] -> PR t a)
  7.  
  8. a :: P Char (T A)
  9. a = undefined
  10.  
  11. b :: P Char (T B)
  12. b = undefined
  13.  
  14. data A = A
  15. data B = B
  16. data E = E String
  17.  
  18. data T a where
  19.     A' :: T A
  20.    B' :: T B
  21.     E' :: E -> T E
  22.  
  23. type H t = [Char] -> (t, [Char])
  24. type TT t = [Char] -> [t]
  25.  
  26. tt :: H t -> [P Char t] -> TT t
  27. tt = undefined
  28.  
  29. h :: H (T a)
  30. h []          = (E' (E "E"), [])
  31. h (head:rest) = (E' (E ("E")), rest)
  32.  
  33. tt' :: [Char] -> [T a]
  34. tt' = tt h [a, b]
  35.  
  36. main :: IO ()
  37. main = putStrLn "Hello"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement