[英]Haskell function that converts type to string by type application
所以,我想有一个像这样的函数/值:
converter :: Converter a
其中Converter
是某种类型族,它总是会导致String
并被使用,以便我们可以通过使用类型应用程序将想要转换为String
的类型应用为例如
converter @Int => "Int"
我正在考虑使用具有typeOf
函数的Typeable
类。 不幸的是,这需要一个实际值才能起作用。
我可以使用Proxy
来提供“实际”值,但是比起我必须从生成的String
删除Proxy
,这感觉有点脏并且容易出错。
有什么想法吗?
为什么不只是
{-# LANGUAGE TypeApplications #-}
import Data.Typeable
main = print $ typeRep (Proxy @Int)
typeRep
设计为采用代理,并且只关心该代理上的类型(因此无需删除任何内容)。 当然,其中的其他Proxy
并不是您正在寻找的语法,但是几乎是同一回事吗?
我们可以利用大量扩展: AllowAmbiguousTypes, TypeApplications, ScopedTypeVariables
, AllowAmbiguousTypes, TypeApplications, ScopedTypeVariables
,并产生AllowAmbiguousTypes, TypeApplications, ScopedTypeVariables
答案的变体。
> :{
| convert :: forall a . Typeable a => String
| convert = show . typeRep $ Proxy @ a
| :}
> convert @ Int
"Int"
> convert @ String
"[Char]"
> convert @ Float
"Float"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.