2012-01-27 103 views
21

通常,当我玩Haskell代码时,我会用类型注释和undefined来存储事物。未定义类型级别

foo :: String -> Int 
foo = undefined 

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

(理想情况下,以一种注解一起)

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

进一步想在同一个线程:有没有办法对我来说,存根出类型类为创建这样类型的实例?比以下理论方法更简单的方法?

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

回答

24

您可以使用EmptyDataDecls存根出一个类型,并与KindSignatures你可以给它一种:

{-# LANGUAGE EmptyDataDecls, KindSignatures #-} 

data Foo :: * -> * 

您也可以存根出Monad实例,而与此选项GHC警告。

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

instance Monad Foo 

然后你就不需要留下任何实施return>>=

+1

不错!正是我在找的东西;它更方便,因为你不必写'Foo = Undefined'!和善的签名!很棒的酱。 – 2012-01-27 19:02:59

+0

我相信它与类型别名不一样 - 当你引入一个新的数据时,不会有'Foo a = a'的机会。所以,它与问题的代码不一样,这可能很好。 – gatoatigrado 2012-01-27 20:21:28

+0

@gatoatigrado:我认为这个需求只是一个尚未写入的类型的占位符,而不是本身的类型别名,然后这是一个合适的解决方案。无论如何,很高兴帮助你丹! – danr 2012-01-28 01:58:51