如何在 REPL 中隐藏名称?
How can I hide a name in the REPL?
如对 , the %hide
directive 的回答中所述,允许使现有名称不可访问:
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
Can't disambiguate name: Main.fib, Prelude.Nat.fib
如何使我的代码中的 %hide
指令转移到 REPL 中?
我认为你不能,调用你的函数的唯一方法是使用它的完全限定名称,例如Main.fib 10
可以。
如对 %hide
directive 的回答中所述,允许使现有名称不可访问:
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
Can't disambiguate name: Main.fib, Prelude.Nat.fib
如何使我的代码中的 %hide
指令转移到 REPL 中?
我认为你不能,调用你的函数的唯一方法是使用它的完全限定名称,例如Main.fib 10
可以。