vector - Idris - 索引擦除失败
问题描述
我目前正试图从我的 Idris 程序中删除所有未使用的索引 - 然而,在一种情况下,Idris 编译器认为索引是可访问的。我尝试在以下最小示例中复制该行为:
module Main
%access public export
-- CUSTOM VECTOR TYPES
data VectA : Nat -> Type -> Type where
VNilA : VectA Z a
VConsA : a -> VectA len a -> VectA (S len) a
data VectB : Nat -> Type -> Type where
VNilB : VectB Z a
VConsB : a -> VectB len a -> VectB (S len) a
-- THE FOLLOWING FUNCTIONS ARE USED TO CREATE A
-- CUSTOM VECTOR WHERE THE SIZE IS UNKNOWN
fromList : (l : List a) -> VectA (length l) a
fromList [] = VNilA
fromList (x::xs) = VConsA x (fromList xs)
createList : String -> List Int
createList "42" = [42, 42, 42]
createList _ = [1, 2, 3, 4]
-- SOME NESTED TRANSFORMATION FUNCTIONS ON VECT
transformVectA : VectA n a -> Maybe (VectB n a)
transformVectA VNilA = Just VNilB
transformVectA (VConsA v vs) =
case transformVectA vs of
Just vs' => Just $ VConsB v vs'
Nothing => Nothing
transformVectB : VectA m a -> VectB n a -> Maybe (VectB n a)
transformVectB VNilA ws = Just ws
transformVectB (VConsA v vs) ws = transformVectB vs ws
transformVect : VectA n a -> VectA m a -> Maybe (VectB n a)
transformVect VNilA VNilB = Nothing
transformVect VNilA VNilA = Nothing
transformVect vs VNilA = Nothing
transformVect (VConsA v vs) xs =
case transformVectA (VConsA v vs) of
Nothing => Nothing
Just vs' => transformVectB xs vs'
main : IO ()
main = do
(testArg :: _) <- getArgs
ls <- pure $ createList testArg
va <- pure $ fromList ls
vb <- pure $ transformVect va va
putStrLn "OK"
当通过运行编译时:
idris Erasure.idr -o Erasure --warnreach
...显示以下警告:
Main.transformVect: inaccessible arguments reachable:
n (no more information available)
m (no more information available)
使用附加选项编译时,我也无法阅读转储箱:
--dumpcases case.txt
为什么会出现这些警告?除了教程中的“按使用分析擦除”一章之外,是否有任何关于 Idris 如何处理擦除的信息?
解决方案
推荐阅读
- javascript - 反应JS中的打字稿
- angular - 当用户选择多个“x”选项时禁用未选择的选项
- flutter - 在“有效飞镖”之后捕获错误和异常的正确方法是什么?
- electron - 在windows上创建APPX包和DMG包
- javascript - 使用 CSS 调整图像大小时如何解决模糊图像问题?
- python - Pygame - 如何从下到上逐渐填充对象?
- nativescript - ios - 无法单击 radlistview 中的第一项
- ios - 将新文档添加到 Firestore 时应用程序开始崩溃(即使在删除文档后仍继续崩溃)
- prestashop - 将日期格式 Prestashop 后台更改为 DD-MM-YYYY
- python-3.x - for循环中列表中的所有元素都相同