在类型级别未定义

Dan*_*ton 23 haskell types undefined ghc type-kinds

通常当我正在使用Haskell代码时,我会使用类型注释来解决问题undefined.

foo :: String -> Int
foo = undefined
Run Code Online (Sandbox Code Playgroud)

是否存在类型级别的"未定义",我可以以类似的方式使用它?

(理想情况下,结合一种注释)

type Foo :: * -> *
type Foo = Undefined
Run Code Online (Sandbox Code Playgroud)

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

instance Monad Foo where
  return = undefined
  (>>=) = undefined
Run Code Online (Sandbox Code Playgroud)

dan*_*anr 26

你可以EmptyDataDecls用来存根一个类型,KindSignatures你可以给它一种:

{-# LANGUAGE EmptyDataDecls, KindSignatures #-}

data Foo :: * -> *
Run Code Online (Sandbox Code Playgroud)

您也可以Monad使用GHC的此选项将实例存根,而不发出警告.

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

instance Monad Foo
Run Code Online (Sandbox Code Playgroud)

然后你不需要为return和保留任何实现>>=.


Dan*_*ton 3

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

如今,为了undefined删除代码,您应该使用类型化的漏洞及其类型级类似物、部分类型签名