Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. #!/usr/bin/env stack
  2. {- stack
  3. --resolver lts-8.2
  4. exec ghci
  5. --package email-validate
  6. --package bytestring
  7. -}
  8.  
  9. {-# LANGUAGE StandaloneDeriving #-}
  10. {-# LANGUAGE DeriveLift #-}
  11. {-# LANGUAGE TemplateHaskell #-}
  12. {-# LANGUAGE ScopedTypeVariables #-}
  13. {-# LANGUAGE QuasiQuotes #-}
  14.  
  15. import Language.Haskell.TH
  16. import Language.Haskell.TH.Quote
  17. import Language.Haskell.TH.Syntax
  18. import Data.ByteString.Char8
  19. import Text.Email.Validate
  20.  
  21. instance Lift ByteString where
  22. lift b = [|pack $(lift $ unpack b)|]
  23.  
  24. instance Lift EmailAddress where
  25. lift email = lift (toByteString email)
  26.  
  27. email :: QuasiQuoter
  28. email =
  29. QuasiQuoter
  30. { quoteExp =
  31. str ->
  32. let (item :: EmailAddress) =
  33. case (validate (pack str)) of
  34. Left msg -> error msg
  35. Right email -> email
  36. in [|item|]
  37. }
  38.  
  39. > :set -XQuasiQuotes
  40. > [email|sibi@mydomain.in|]
  41. "sibi@mydomain.in"
  42. > [email|invalidemail|]
  43.  
  44. <interactive>:6:1: error:
  45. • Exception when trying to run compile-time code:
  46. @: not enough input
  47. CallStack (from HasCallStack):
  48. error, called at EmailV.hs:36:28 in main:EmailV
  49. Code: quoteExp email "invalidemail"
  50. • In the quasi-quotation: [email|invalidemail|]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement