相关疑难解决方法(0)

使用标准的haskell泛型库进行类型化同构

有在短短的哈斯克尔平台单独(许多重叠的模块数泛型库syb,Data.Typeable,Data.Data,GHC.Generics),但我有一个非常基本的通用编程任务的麻烦.

我希望能够在相同形状的类型之间进行转换,即我想要在同构类型之间的多态,类型转换函数,本质上是本文末尾提供的(PDF),其中提到了索引类型族.

我并不关心废弃我的样板,而是能够围绕总和和产品抽象构建新的库.

下面的问题是GHC.Generic我认为最接近我需要的问题,但欢迎其他解决方案.


以下两种类型具有相同的形状

data Pair = Pair Char Int deriving (Generic, Show)
data Pair2 = Pair2 Char Int deriving (Generic, Show)
Run Code Online (Sandbox Code Playgroud)

我想使用GHC.Generics在它们之间转换值.由于所有幻像参数和其他废话,以下未能进行类型检查:

f :: Pair -> Pair2
f = to . from
Run Code Online (Sandbox Code Playgroud)

最终,我想要一个类似于fromInteger具有任何Generic(或任何其他类可支持此实例)实例的多态返回值的函数.我想我正在寻找类似的东西GHC.Generics:

--class:
type family NormalForm a
class ToGeneric a where
    to :: a -> NormalForm a
class FromGeneric b where
    from :: NormalForm b -> b

--examples:
data …
Run Code Online (Sandbox Code Playgroud)

generics haskell ghc haskell-platform

17
推荐指数
2
解决办法
706
查看次数

标签 统计

generics ×1

ghc ×1

haskell ×1

haskell-platform ×1