Idris 没有减少地图查找
Idris not reducing map lookup
为什么不减少函数调用?如何在编译时验证映射是否包含键值对?
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)])
它一定与 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
.
为什么不减少函数调用?如何在编译时验证映射是否包含键值对?
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)])
它一定与 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
.