Import 如何在REPL中隐藏名称?
如回答中所述,允许将现有名称设置为不可访问:Import 如何在REPL中隐藏名称?,import,module,read-eval-print-loop,ambiguous,idris,Import,Module,Read Eval Print Loop,Ambiguous,Idris,如回答中所述,允许将现有名称设置为不可访问: import Data.String %hide fib %default total fib : Nat -> Nat fib n = loop n 0 1 where loop : Nat -> Nat -> Nat -> Nat loop Z a _ = a loop (S k) a b = loop k b (a + b) parseNat : String -> Maybe
import Data.String
%hide fib
%default total
fib : Nat -> Nat
fib n = loop n 0 1
where
loop : Nat -> Nat -> Nat -> Nat
loop Z a _ = a
loop (S k) a b = loop k b (a + b)
parseNat : String -> Maybe Nat
parseNat = map cast . parsePositive
response : String -> String
response s = case parseNat s of
Just n => "fib n = " ++ show (fib n)
Nothing => "n ∉ ℕ"
partial main : IO ()
main = repl "n = " ((++ "\n") . response)
这在上面的代码中工作良好:
*Main>:exec
n=10
fib n=55
但是,它似乎没有结转到REPL:
*Main>fib 10
无法消除名称的歧义:Main.fib,Prelude.Nat.fib
如何使
%hide
指令从我的代码带入REPL?我认为您不能,调用函数的唯一方法是使用它的完全限定名,例如Main.fib 10