Haskell 中的 Pragma 语法
Pragma syntax in Haskell
module Practice where
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
class TooMany a where
tooMany :: a -> Bool
instance TooMany Int where
tooMany n = n > 42
newtype Goats =
Goats Int deriving (Eq, Show)
--What I load into the playground
tooMany (Goats 17)
--the error I get: " No instance for (TooMany Goats) arising from a use of ‘tooMany’ "
我相信这段代码应该可以工作,但没有工作,因为我正在使用 Haskell For Mac,它可能使用不同的编译指示符号。
当你使用GeneralizedNewtypeDeriving
时,你仍然需要在deriving
子句中指定你想要从包装类型中"borrow"哪些实例,所以你定义了Goat
输入:
newtype Goats = Goats Int deriving (Eq, Show<b>, TooMany</b>)
请注意,与一样,您需要在文件顶部定义编译指示,因此:
{-# LANGUAGE <b>GeneralizedNewtypeDeriving</b> #-}
module Practice where
class TooMany a where
tooMany :: a -> Bool
instance TooMany Int where
tooMany n = n > 42
newtype Goats = Goats Int deriving (Eq, Show, TooMany)
在GHCi中,我们可以接着查询,例如:
*Practice> tooMany (Goats 12)
False
虽然我在 Linux 机器上做了这个实验,但我会很惊讶这在不同的平台上不起作用。特别是因为这样的语言扩展与它们 运行 所在的平台没有太大关系。语言扩展通常与平台无关,因此像 一样,在 deriving
中添加类型 class 应该在所有平台上完成。
module Practice where
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
class TooMany a where
tooMany :: a -> Bool
instance TooMany Int where
tooMany n = n > 42
newtype Goats =
Goats Int deriving (Eq, Show)
--What I load into the playground
tooMany (Goats 17)
--the error I get: " No instance for (TooMany Goats) arising from a use of ‘tooMany’ "
我相信这段代码应该可以工作,但没有工作,因为我正在使用 Haskell For Mac,它可能使用不同的编译指示符号。
当你使用GeneralizedNewtypeDeriving
时,你仍然需要在deriving
子句中指定你想要从包装类型中"borrow"哪些实例,所以你定义了Goat
输入:
newtype Goats = Goats Int deriving (Eq, Show<b>, TooMany</b>)
请注意,与
{-# LANGUAGE <b>GeneralizedNewtypeDeriving</b> #-}
module Practice where
class TooMany a where
tooMany :: a -> Bool
instance TooMany Int where
tooMany n = n > 42
newtype Goats = Goats Int deriving (Eq, Show, TooMany)
在GHCi中,我们可以接着查询,例如:
*Practice> tooMany (Goats 12)
False
虽然我在 Linux 机器上做了这个实验,但我会很惊讶这在不同的平台上不起作用。特别是因为这样的语言扩展与它们 运行 所在的平台没有太大关系。语言扩展通常与平台无关,因此像 deriving
中添加类型 class 应该在所有平台上完成。