通常当我使用Haskell代码时,我会使用类型注释和undefined
来存根。
foo :: String -> Int
foo = undefined
我是否可以以类似的方式使用类型级“未定义”?
(理想情况下,与种类注释一起使用)
type Foo :: * -> *
type Foo = Undefined
在同一个线程上进一步思考:有没有办法为这样创建的类型存根类型类实例?比以下理论方法更简单?
instance Monad Foo where
return = undefined
(>>=) = undefined
答案 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
来插入代码。