该声明不起作用:
data Identity a where {Identity :: (->) a (Identity a)}
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
至少从 GHC 7.8 开始,如果您打开 GADT 支持,那么您的代码将进行类型检查并执行您期望的操作:
\n\n{-# LANGUAGE GADTs #-}\ndata Identity a where {Identity :: (->) a (Identity a)}\nRun Code Online (Sandbox Code Playgroud)\n\n导致:
\n\nGHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help\nLoading package ghc-prim ... linking ... done.\nLoading package integer-gmp ... linking ... done.\nLoading package base ... linking ... done.\n[1 of 1] Compiling Main ( foo.hs, interpreted )\nOk, modules loaded: Main.\n\xce\xbb\xc2\xbb :i Identity\ndata Identity a = Identity a -- Defined at foo.hs:2:1\nRun Code Online (Sandbox Code Playgroud)\n