未定义类型级别
问题描述:
通常,当我玩Haskell代码时,我会用类型注释和undefined
来存储事物。未定义类型级别
foo :: String -> Int
foo = undefined
是否有类型级别的“未定义”,我可以用类似的方式?
(理想情况下,以一种注解一起)
type Foo :: * -> *
type Foo = Undefined
进一步想在同一个线程:有没有办法对我来说,存根出类型类为创建这样类型的实例?比以下理论方法更简单的方法?
instance Monad Foo where
return = undefined
(>>=) = undefined
答
您可以使用EmptyDataDecls
存根出一个类型,并与KindSignatures
你可以给它一种:
{-# LANGUAGE EmptyDataDecls, KindSignatures #-}
data Foo :: * -> *
您也可以存根出Monad
实例,而与此选项GHC警告。
{-# OPTIONS_GHC -fno-warn-missing-methods #-}
instance Monad Foo
然后你就不需要留下任何实施return
和>>=
。
不错!正是我在找的东西;它更方便,因为你不必写'Foo = Undefined'!和善的签名!很棒的酱。 – 2012-01-27 19:02:59
我相信它与类型别名不一样 - 当你引入一个新的数据时,不会有'Foo a = a'的机会。所以,它与问题的代码不一样,这可能很好。 – gatoatigrado 2012-01-27 20:21:28
@gatoatigrado:我认为这个需求只是一个尚未写入的类型的占位符,而不是本身的类型别名,然后这是一个合适的解决方案。无论如何,很高兴帮助你丹! – danr 2012-01-28 01:58:51