【发布时间】:2016-12-05 04:22:07
【问题描述】:
我是 Haskell 的新手。
我正在寻找是否有任何方法可以创建类类型的实例。
有什么方法可以在不使用 data 或 newtype 的情况下让这段代码正常工作?
type N = ∀n. (n -> n) -> n -> n
instance Printable N where
print :: N -> IO ()
read :: String -> N
当我尝试在 GHCi 中加载模块时,它告诉我:
Illegal polymorphic or qualified type: N
In the instance declaration for ‘Printable N’
【问题讨论】:
-
你为什么不想使用
newtype? -
如果我使用 newtype 或 data 我需要写类似:
newtype N = N (n -> n) -> n -> n),然后重写像(+) (N a) (N b) = stuff这样的函数而不是(+) = \a b -> stuff而不拆箱 a 或 b。 -
在当前的 GHC 中最好避免含糊不清。没有办法,只能使用
newtype或data。 (同时查找安全强制,这使得newtypes 在某些情况下更易于处理)。
标签: haskell types church-encoding