【问题标题】:Idris not reducing map lookup伊德里斯没有减少地图查找
【发布时间】:2019-01-19 02:04:57
【问题描述】:

为什么不减少函数调用?如何在编译时验证映射是否包含键值对?

import Data.SortedMap

N : SortedMap String Type
N = fromList
    [ ("a", Nat)
    , ("b", String)
    ]

t : lookup "a" N = Just Nat
t = Refl

Type mismatch between
        Just Nat = Just Nat (Type of Refl)
and
        lookup "a" (fromList [("a", Nat), ("b", String)]) = Just Nat (Expected type)

Specifically:
        Type mismatch between
                Just Nat
        and
                lookup "a" (fromList [("a", Nat), ("b", String)])

【问题讨论】:

    标签: idris


    【解决方案1】:

    它必须与SortedMap 的实现有关,因为使用普通List 的版本按预期工作:

    N : List (String, Type)
    N =
        [ ("a", Nat)
        , ("b", String)
        ]
    
    t : lookup "a" N = Just Nat
    t = Refl
    

    根据文档Data.SortedMap.lookup 也是总数,因此应该减少。可能原因是SortedMap 中的函数和数据类型似乎有导出限定符,而Data.List 中的那些使用public export。

    【讨论】:

    • 非常感谢您的回答! :) 我花了一个多小时试图弄清楚为什么我的一个证明没有编译并开始质疑我对事物的理解,然后才找到谷歌的正确关键字,以便找到它并通过使用解决整个问题public export...
    猜你喜欢
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    相关资源
    最近更新 更多