我有一个名为Showable喜欢这类型:有没有一种方法来表示函数在GHC的Haskell中显示的解压缩?
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE ExplicitForAll #-}
data Showable = forall a . Show a => Showable a
然后使该包装是微不足道的功能。我只需要写:
pack :: forall a . Show a => a -> Showable
pack x = Showable x
但是,似乎不可能创建将解包来自Showable的数据的反函数。如果我尝试只是颠倒了我写了包,并写:
unpack :: exists a . Show a => Showable -> a
unpack (Showable x) = x
然后我从GHC的错误。
我已经查看了关于GHC语言扩展的文档,似乎没有对exists关键字的支持。我已经看到在其他一些Haskell编译器中可能会有这种可能,但我更希望能够在GHC中做到这一点。
有趣的是,我仍然可以在Showable上模式匹配,并以这种方式从内部提取数据。所以我可以通过这种方式获得价值,但是如果我想制作一个涉及Showable的免提功能,那么我需要解包。
那么有没有什么办法可以在GHC的Haskell中实现解压缩,也许使用Type家族或者其他一些GHC扩展的神秘魔法?
会是什么'(解包(包(1 ::智力)))::字符串“是吗? – Cirdec
我认为这应该是一个编译错误,因为你打算在打包这个值之后给它一个类型,因为在你打包之后你会丢失关于内部错误的信息,所以你不知道你是否可以将其类型更改为String。 –