Haskell函数的实现取决于种类?

时间:2016-10-18 08:23:18

标签: haskell

我正在阅读一个haskell教程,在阅读类型系统类部分时,我无法使用替换模型来确定函数执行。

class Tofu t where
   tofu :: j a -> t a j

data Frank a b = Frank {frankField :: b a} deriving (Show)

instance Tofu Frank where
  tofu = Frank

我能理解j有类型* - > *,t的类型为* - > (* - > *) - > *,和Frank一样是* - > (* - > *) - > *,匹配t,所以可以实例豆腐弗兰克,但豆腐实施让我迷惑,如果我喜欢这个

tofu (Just 'a') :: Frank Char Maybe 

(只是'a')种类是*,Just is * - > *,匹配ja,我使用替换型号,弗兰克(只是'a'),没有意义,弗兰克应该得到一个*和一个 - > ,但如果这样,应该是弗兰克'a “只是,有意义但语法错误,我想知道这个存档如何使替换模型工作和语法检查。

1 个答案:

答案 0 :(得分:1)

哦,我明白了,

 Frank a b 

是类型构造函数,值构造函数是

 Frank {frankField :: b a}

所以

 tofu (Just 'a') = Frank {frankField = Just 'a'}   

种类匹配和替换模型工作。