相关疑难解决方法(0)

是否有可能在Haskell中获得类型构造函数?

我正在使用Data.Typeable,特别是我希望能够生成特定类型的正确类型(比方说*).我遇到的问题是TypeRep允许我们执行以下操作(使用GHC 7.8中的版本):

let maybeType = typeRep (Proxy :: Proxy Maybe)
let maybeCon = fst (splitTyConApp maybeType)
let badType = mkTyConApp maybeCon [maybeType]
Run Code Online (Sandbox Code Playgroud)

badType在某种意义上是Maybe Maybe类型的表示,它不是任何种类的有效类型:

> :k Maybe (Maybe)

<interactive>:1:8:
    Expecting one more argument to ‘Maybe’
    The first argument of ‘Maybe’ should have kind ‘*’,
      but ‘Maybe’ has kind ‘* -> *’
    In a type in a GHCi command: Maybe (Maybe)
Run Code Online (Sandbox Code Playgroud)

我不打算在类型级别强制执行此操作,但我希望能够编写一个足够智能的程序,以避免在运行时构造此类型.我可以用数据级术语来做到这一点TypeRep.理想情况下,我会有类似的东西

data KindRep = Star | KFun KindRep KindRep
Run Code Online (Sandbox Code Playgroud)

并有一个函数kindOfkindOf Int …

haskell type-kinds

12
推荐指数
1
解决办法
349
查看次数

标签 统计

haskell ×1

type-kinds ×1