繁体   English   中英

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

[英]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, ScopedTypeVariablesAllowAmbiguousTypes, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM