Contenu connexe Similaire à Template Haskell とか (20) Template Haskell とか9. TH
Haskell
IO
compile-time wxWidgets Network...
11. RandomDef.hs
{-# LANGUAGE TemplateHaskell #-}
module Main where
import Language.Haskell.TH
import System.Random
$( do rnd <- runIO $ randomRIO (0,1)
let nm = mkName (["a", "b"] !! rnd)
m <- [d| main = $(varE $ mkName "a") |]
t <- valD (varP nm) (normalB [| putStrLn " ( ´ `) " |]) []
return (t:m)
)
12. RandomDef.hs
{-# LANGUAGE TemplateHaskell #-}
module Main where
import Language.Haskell.TH
import System.Random IO
$( do rnd <- runIO $ randomRIO (0,1)
let nm = mkName (["a", "b"] !! rnd)
m <- [d| main = $(varE $ mkName "a") |]
t <- valD (varP nm) (normalB [| putStrLn " ( ´ `) " |]) []
return (t:m)
)
13. Splice( )
{-# LANGUAGE TemplateHaskell #-}
module Main where
import Language.Haskell.TH
import System.Random
$( do rnd <- runIO $ randomRIO (0,1)
let nm = mkName (["a", "b"] !! rnd)
m <- [d| main = $(varE $ mkName "a") |]
t <- valD (varP nm) (normalB [| putStrLn " ( ´ `) " |]) []
return (t:m)
)
17. Splice
(Q )
splice
splice
“ ”
18. {-# LANGUAGE TemplateHaskell #-}
module Main where
import Language.Haskell.TH
import System.Random
$( do rnd <- runIO $ randomRIO (0,1)
let nm = mkName (["a", "b"] !! rnd)
m <- [d| main = $(varE $ mkName "a") |]
t <- valD (varP nm) (normalB [| putStrLn " ( ´ `) " |]) []
return (t:m)
)
21. [ |
[| putStrLn “hogehoge” |]
22. [ |
[| putStrLn “hogehoge” |]
[t| String |]
23. [ |
[| putStrLn “hogehoge” |]
[t| String |]
[d| main = putStrLn |]
24. [ |
[| putStrLn “hogehoge” |]
[t| String |]
[d| main = putStrLn |]
[$ident| function f() {..} |]
25. [ |
[| putStrLn “hogehoge” |]
[t| String |]
[d| main = putStrLn |]
[$ident| function f() {..} |]
DSL
26. [ |
[| putStrLn “hogehoge” |]
[t| String |]
[d| main = putStrLn |]
[$ident| function f() {..} |]
DSL
27. [ |
[| putStrLn “hogehoge” |]
[t| String |]
[d| main = putStrLn |]
[$ident| function f() {..} |]
DSL
)JavaScript (
28. splice
[d| main = $(varE $ mkName "a") |]
splice
[d| main = ‘a |] TH
a
`a
``String
29. {-# LANGUAGE TemplateHaskell #-}
module Main where
import Language.Haskell.TH
import System.Random
$( do rnd <- runIO $ randomRIO (0,1)
let nm = mkName (["a", "b"] !! rnd)
m <- [d| main = $(varE $ mkName "a") |]
t <- valD (varP nm) (normalB [| putStrLn " ( ´ `) " |]) []
return (t:m)
)
30. valD (varP nm) (normalB [| putStrLn " ( ´ `) " |]) []
[d| $(varP nm) = putStrLn “ ( ´ `) ” |]
…… ……
ghci
> runQ [d| main = putStrLn “hoge” |]
32. lib2 =
let
l=LetS[ValD(VarP $ mkName"it")(NormalB(f"be"))[]]
f=VarE . mkName
in
DoE [ l, l, l, NoBindS $ f"oh",l,
NoBindS $ InfixE(Just$ f"speaking")(f"words")(Just $ f "wisdom"),l]
33. lib2 =
let
l=LetS[ValD(VarP $ mkName"it")(NormalB(f"be"))[]]
f=VarE . mkName
in
DoE [ l, l, l, NoBindS $ f"oh",l,
NoBindS $ InfixE(Just$ f"speaking")(f"words")(Just $ f "wisdom"),l]
34. lib2 =
let
l=LetS[ValD(VarP $ mkName"it")(NormalB(f"be"))[]]
f=VarE . mkName
in
DoE [ l, l, l, NoBindS $ f"oh",l,
NoBindS $ InfixE(Just$ f"speaking")(f"words")(Just $ f "wisdom"),l]
do let it = be
let it = be
let it = be
oh
let it = be
speaking `words` wisdom
let it = be