如何使用来自 Maybe 的数据作为 Vect 大小变量
How to use data from Maybe as Vect size variable
我正在尝试编写一个简单的程序,询问用户列表的大小,并根据用户的输入按索引显示该列表中的内容。但我卡住了。我有一个按数字构建列表的函数。现在我想创建另一个使用 Maybe Nat
作为输入和 returns Maybe (Vect n Nat)
的函数。但我不知道如何做到这一点。这是代码:
module Main
import Data.Fin
import Data.Vect
import Data.String
getList: (n: Nat) -> Vect n Nat
getList Z = []
getList (S k) = (S k) :: getList k
mbGetList : (Maybe Nat) -> Maybe (Vect n Nat)
mbGetList mbLen = case mbLen of
Just len => Just (getList len)
Nothing => Nothing
main : IO ()
main = do
len <- readNum
-- list <- mbGetList len
putStrLn (show len)
这里是错误:
|
55 | Just len => Just (getList len)
| ~~~~~~~~~~~
When checking right hand side of Main.case block in mbGetList at main.idr:54:24-28 with expected type
Maybe (Vect n Nat)
When checking argument n to function Main.getList:
Type mismatch between
n (Inferred value)
and
len (Given value)
我试图声明一个隐式变量。代码可以编译,但我不能使用它(至少 throw repl)。另外,我尝试使用依赖对但也失败了。也许我应该使用 Dec
而不是 Maybe
?但是怎么办???另一种尝试是尝试使用 map
函数。但在那种情况下,我有这样的错误:Can't infer argument n to Functor
.
那么,我错过了什么?
这个答案感觉不是最优的,但这里是
mbGetList : (mbLen: Maybe Nat) -> case mbLen of
(Just len) => Maybe (Vect len Nat)
Nothing => Maybe (Vect Z Nat)
mbGetList (Just len) = Just (getList len)
mbGetList Nothing = Nothing
我认为困难在于如果您没有有效的输入
,Vect
就没有明确定义的长度
我正在尝试编写一个简单的程序,询问用户列表的大小,并根据用户的输入按索引显示该列表中的内容。但我卡住了。我有一个按数字构建列表的函数。现在我想创建另一个使用 Maybe Nat
作为输入和 returns Maybe (Vect n Nat)
的函数。但我不知道如何做到这一点。这是代码:
module Main
import Data.Fin
import Data.Vect
import Data.String
getList: (n: Nat) -> Vect n Nat
getList Z = []
getList (S k) = (S k) :: getList k
mbGetList : (Maybe Nat) -> Maybe (Vect n Nat)
mbGetList mbLen = case mbLen of
Just len => Just (getList len)
Nothing => Nothing
main : IO ()
main = do
len <- readNum
-- list <- mbGetList len
putStrLn (show len)
这里是错误:
|
55 | Just len => Just (getList len)
| ~~~~~~~~~~~
When checking right hand side of Main.case block in mbGetList at main.idr:54:24-28 with expected type
Maybe (Vect n Nat)
When checking argument n to function Main.getList:
Type mismatch between
n (Inferred value)
and
len (Given value)
我试图声明一个隐式变量。代码可以编译,但我不能使用它(至少 throw repl)。另外,我尝试使用依赖对但也失败了。也许我应该使用 Dec
而不是 Maybe
?但是怎么办???另一种尝试是尝试使用 map
函数。但在那种情况下,我有这样的错误:Can't infer argument n to Functor
.
那么,我错过了什么?
这个答案感觉不是最优的,但这里是
mbGetList : (mbLen: Maybe Nat) -> case mbLen of
(Just len) => Maybe (Vect len Nat)
Nothing => Maybe (Vect Z Nat)
mbGetList (Just len) = Just (getList len)
mbGetList Nothing = Nothing
我认为困难在于如果您没有有效的输入
,Vect
就没有明确定义的长度