gpt4 book ai didi

haskell - 类型系列 : top level vs. 相关联

转载 作者:行者123 更新时间:2023-12-05 01:01:24 26 4
gpt4 key购买 nike

我刚刚开始学习类型家庭。 GHC 文档指出顶级和关联的类型系列具有相同的功能,但我编写的代码在顶级的行为与关联系列时的行为不同。这编译并运行良好:

{-# LANGUAGE TypeFamilies #-}
module Test where

-- type family R a
-- type instance R Maybe = Int

class C' a where
type R a
getInt' :: a Int
getBool' :: R a -> a Bool

instance C' Maybe where
type R Maybe = Int
getInt' = Just 3
getBool' i = Just $ i < 10

printer :: IO ()
printer = print $ (getBool' 5 :: Maybe Bool)

但这给了我一个类型错误:
{-# LANGUAGE TypeFamilies #-}
module Test where

type family R a
type instance R Maybe = Int

class C' a where
-- type R a
getInt' :: a Int
getBool' :: R a -> a Bool

instance C' Maybe where
-- type R Maybe = Int
getInt' = Just 3
getBool' i = Just $ i < 10

printer :: IO ()
printer = print $ (getBool' 5 :: Maybe Bool)

这些对我来说看起来一模一样;为什么一个编译而另一个不编译?

最佳答案

如果您注释种类,则第二个有效:

type family R (a :: * -> *)

我认为没有任何理由只为关联的类型系列推断正确的类型。

关于haskell - 类型系列 : top level vs. 相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28247832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com