2017-07-23 5 views
1

Wie in der Antwort auf this question angegeben, die %hide directive ermöglicht einen unzugänglichen einen vorhandenen Namen zu machen:Wie kann ich einen Namen in der REPL verbergen?

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) 

Dies funktioniert gut im Code oben:

*Main> :exec 
n = 10 
fib n = 55 

aber es scheint nicht zu über~~POS=TRUNC auf die REPL:

*Main> fib 10 
Can't disambiguate name: Main.fib, Prelude.Nat.fib 

Wie kann ich dieverursachenDirektiven aus meinem Code in die REPL zu übertragen?

Antwort

2

Ich denke, dass Sie nicht können und die einzige Möglichkeit, Ihre Funktion aufzurufen, besteht darin, ihren vollständig qualifizierten Namen zu verwenden, z. Main.fib 10 würde funktionieren.

Verwandte Themen