Haskell函数,通过类型应用程序将类型转换为字符串

时间:2018-05-12 19:28:38

标签: string haskell types converter

所以,我想要一个像这样的函数/值:

converter :: Converter a

其中Converter将是某个类型系列,它始终会生成String并且仅用于我们可以通过使用类型应用程序将我们要转换为String的类型应用于

converter @Int => "Int"

我在考虑使用具有Typeable功能的typeOf类。不幸的是,它需要一个实际的价值才能发挥作用。

我可以使用Proxy来提供“实际”值,但我必须从生成的Proxy中删除String,这样会感觉有点脏,容易出错。< / p>

思想?

2 个答案:

答案 0 :(得分:3)

为什么不

{-# LANGUAGE TypeApplications #-}

import Data.Typeable

main = print $ typeRep (Proxy @Int)

typeRep旨在获取代理,并且只关注该代理上的类型(因此不需要删除任何内容)。当然,那里的额外Proxy并不是你要寻找的语法,但它几乎是一样的吗?

答案 1 :(得分:3)

我们可以利用一堆扩展:AllowAmbiguousTypes, TypeApplications, ScopedTypeVariables,并生成@ Cubic答案的变体。

> :{
| convert :: forall a . Typeable a => String
| convert = show . typeRep $ Proxy @ a
| :}
> convert @ Int
"Int"
> convert @ String
"[Char]"
> convert @ Float
"Float"