繁体   English   中英

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

[英]Haskell function implementation depends on kind?

我正在阅读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')的种类是*,就是*-> *,匹配ja,我使用替换模型Frank(只是'a'),没有意义,弗兰克应该得到*和a-> ,但是如果喜欢这应该是Frank'a'只是,有意义但语法错误,我想知道此存档如何使替换模型工作和语法检查。

哦,我明白了

 Frank a b 

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

 Frank {frankField :: b a}

所以

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM