Purescript-无法统一类型

Naruvimama

我是Purescript的新手(以及Haskell),并且陷入无法统一的错误。最初我有:

newtype Domain = Domain String

newtype Keyword = Keyword String

type Result = {
        domain    :: Domain,
        occurred   :: Boolean,
        position  :: Number,
        quality   :: Number
    }

is_min_pos :: Maybe Result -> Maybe Result -> Maybe Result
is_min_pos Nothing Nothing = Nothing
is_min_pos Nothing y = y
is_min_pos x Nothing = x
is_min_pos x y = if y.position < x.position then y else x     

这给了我错误

Cannot unify type
  Prim.Object
with type
  Data.Maybe.Maybe

我以为是因为它期望x和y属于Maybe Record类型。因此,为了明确起见,我将代码更改为按类型进行模式匹配。

data Result = Result {
        domain    :: Domain,
        occurred   :: Boolean,
        position  :: Number,
        quality   :: Number
    }

is_min_pos (Result x) (Result y) = if y.position < x.position then y else x

现在我得到了错误

Cannot unify type
  Data.Maybe.Maybe Processor.Result
with type
  Processor.Result

这是指本节

y.position < x.position -- in the first case

在第二种情况下

Result x -- on the pattern matching side

我正在进一步研究

type Results = List Result

get_item_with_min_position :: Results -> Maybe Result
--get_item_with_min_position [] = Nothing
get_item_with_min_position results = foldl is_min_pos Nothing results

我正在使用Foldable中的“ foldl”。我不确定如何模式匹配一​​个空列表。如果可以,我可以将类型签名更改为

is_min_pos :: Maybe Result -> Result -> Maybe Result

我现在得到了错误

Cannot unify type
    Prim.Object
with type
    Data.Maybe.Maybe

这是可以理解的,因为

foldl is_min_pos Nothing results

结果是列表结果类型is_min_pos期望可能是结果

有什么干净的方法可以解决这个问题?

菲尔·弗里曼

Maybe类型具有两个数据构造函数:Nothing,您正确匹配的和Just如果你想匹配类型的东西Maybe a确实包含一个值,你应该匹配的Just构造函数。

您需要修改最终情况,如下所示:

is_min_pos (Just x) (Just y) = if y.position < x.position 
                                  then Just y 
                                  else Just x

在这里,Just x具有type Maybe Result,根据类型签名是正确的,因此x具有type Result,因此您可以使用.position访问器读取其position属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PureScript和类型类

来自分类Dev

在Haskell中使用自己的typeclass实现max迭代器时,无法统一类型

来自分类Dev

将PureScript类型暴露给JavaScript

来自分类Dev

Purescript 无法从键盘获取键码

来自分类Dev

为什么此类型类实例无法统一?

来自分类Dev

purescript-lens构图类型错误

来自分类Dev

Purescript中匿名函数的类型问题

来自分类Dev

在 PureScript 中专门化类实例

来自分类Dev

是否存在Purescript类型类来泛化整数?

来自分类Dev

Purescript 将类视为循环类型同义词

来自分类Dev

在PureScript中将#与两种类型一起使用

来自分类Dev

在 purescript 中获取新类型的记录基础类型

来自分类Dev

Purescript中的新类型是否可能存在约束?

来自分类Dev

在 purescript 中使用随机类型检查错误

来自分类Dev

统一类型和非类型模板参数

来自分类Dev

C / C ++技巧:为多个不同类型定义统一类型?

来自分类Dev

purescript入门

来自分类Dev

正则表达式以验证统一类型标识符

来自分类Dev

什么是Automator工作流程的统一类型标识符(UTI)?

来自分类Dev

如何在没有冗余方法的情况下在Purescript中定义类型类实例

来自分类Dev

在 purescript-dom 中,您如何从 Node 转到特定元素类型?

来自分类Dev

没有构造函数的 Purescript `data` 类型是什么意思?

来自分类Dev

从不一致的JavaScript对象创建PureScript记录

来自分类Dev

为什么unsafePartial在PureScript中不能与简单的函子一起使用?

来自分类Dev

通用参数扩展类型,但位置相反,且打字稿无法统一它

来自分类Dev

当作为 purescript 类型签名的一部分时,管道字符 (|) 是什么意思?

来自分类Dev

在Purescript中提示Monad

来自分类Dev

Purescript铝热剂和websockets

来自分类Dev

Purescript中的读者Monad

Related 相关文章

  1. 1

    PureScript和类型类

  2. 2

    在Haskell中使用自己的typeclass实现max迭代器时,无法统一类型

  3. 3

    将PureScript类型暴露给JavaScript

  4. 4

    Purescript 无法从键盘获取键码

  5. 5

    为什么此类型类实例无法统一?

  6. 6

    purescript-lens构图类型错误

  7. 7

    Purescript中匿名函数的类型问题

  8. 8

    在 PureScript 中专门化类实例

  9. 9

    是否存在Purescript类型类来泛化整数?

  10. 10

    Purescript 将类视为循环类型同义词

  11. 11

    在PureScript中将#与两种类型一起使用

  12. 12

    在 purescript 中获取新类型的记录基础类型

  13. 13

    Purescript中的新类型是否可能存在约束?

  14. 14

    在 purescript 中使用随机类型检查错误

  15. 15

    统一类型和非类型模板参数

  16. 16

    C / C ++技巧:为多个不同类型定义统一类型?

  17. 17

    purescript入门

  18. 18

    正则表达式以验证统一类型标识符

  19. 19

    什么是Automator工作流程的统一类型标识符(UTI)?

  20. 20

    如何在没有冗余方法的情况下在Purescript中定义类型类实例

  21. 21

    在 purescript-dom 中,您如何从 Node 转到特定元素类型?

  22. 22

    没有构造函数的 Purescript `data` 类型是什么意思?

  23. 23

    从不一致的JavaScript对象创建PureScript记录

  24. 24

    为什么unsafePartial在PureScript中不能与简单的函子一起使用?

  25. 25

    通用参数扩展类型,但位置相反,且打字稿无法统一它

  26. 26

    当作为 purescript 类型签名的一部分时,管道字符 (|) 是什么意思?

  27. 27

    在Purescript中提示Monad

  28. 28

    Purescript铝热剂和websockets

  29. 29

    Purescript中的读者Monad

热门标签

归档