在类型级别未定义

时间:2012-01-27 16:20:12

标签: haskell types undefined ghc type-kinds

通常当我使用Haskell代码时,我会使用类型注释和undefined来存根。

foo :: String -> Int
foo = undefined

我是否可以以类似的方式使用类型级“未定义”?

(理想情况下,与种类注释一起使用)

type Foo :: * -> *
type Foo = Undefined

在同一个线程上进一步思考:有没有办法为这样创建的类型存根类型类实例?比以下理论方法更简单?

instance Monad Foo where
  return = undefined
  (>>=) = undefined

2 个答案:

答案 0 :(得分:26)

您可以使用EmptyDataDecls来删除某个类型,使用KindSignatures可以给它一种类型:

{-# LANGUAGE EmptyDataDecls, KindSignatures #-}

data Foo :: * -> *

您还可以使用此选项向GHC发送Monad实例而不发出警告。

{-# OPTIONS_GHC -fno-warn-missing-methods #-}

instance Monad Foo

然后您不需要为return>>=留下任何实现。

答案 1 :(得分:3)

很久以前就问过这个问题;此后,最佳实践不断发展。

这几天,您应该使用typed holes及其类型级别的模拟物partial type signatures而不是undefined来插入代码。