如何在haskell中获取变量名称 [英] How to get variable name in haskell

查看:82
本文介绍了如何在haskell中获取变量名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#define print(a)printf (%s =%d \\\
,#a,a)

int a = 5;
print(a);

应该列印

  a = 5 



  { - #LANGUAGE TemplateHaskell 

# - }
module Pr其中
import Language.Haskell.TH
import Language.Haskell.TH.Syntax

pr ::名称 - > ExpQ
pr n = [| putStrLn($(lift(nameBase n ++=))++ show $(varE n))|]

然后在另一个模块中:

  { - #LANGUAGE TemplateHaskell# - } 
import Pr
a =hello
main = $(pr'a)


I came to haskell having some c background knowledge and wondering is there an analog to

#define print( a ) printf( "%s = %d\n", #a, a )

int a = 5;
print( a );

that should print

a = 5

?

解决方案

Here's the TH solution augustss mentioned:

{-# LANGUAGE TemplateHaskell #-}
module Pr where
import Language.Haskell.TH
import Language.Haskell.TH.Syntax

pr :: Name -> ExpQ
pr n = [| putStrLn ( $(lift (nameBase n ++ " = ")) ++ show $(varE n) ) |]

then in another module:

{-# LANGUAGE TemplateHaskell #-}
import Pr
a = "hello"
main = $(pr 'a)

这篇关于如何在haskell中获取变量名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆