2016-10-25 9 views
7

Oto mój kod, próbując przedefiniować *. To może być osiągnięte tylko wtedy, gdy * wcześniej hided:Jak ukryć operatora podczas importowania?

import Prelude hiding (*) 

(*) :: Int -> Int -> Int 
x * 0 = 0 
x * y = x + x*(y-1) 

Ale to nie działa:

$ ghci test.hs 

GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help

test.hs:1:24: error: parse error on input ‘*’

Failed, modules loaded: none.

Prelude>

mogłem ukryć inną funkcję:

import Prelude hiding (read) 

import Prelude hiding (show) 

podczas niej nie działa dla operatora takiego jak *, +, -.

Jak je ukryć?

Odpowiedz

16

Przypomnijmy jak kwerendy ghci na typ funkcji:

:t read 
:t show 

O wykonawcy:

Wykonaj wpiszesz :t +?

Nie, wówczas wystąpiłby błąd analizy.

Robisz :t (+).

W Twoim przypadku, ukryć go z dodatkowymi wspornikami: ((*))

import Prelude hiding ((*)) 

(*) :: Int -> Int -> Int 
x * 0 = 0 
x * y = x + x*(y-1) 
Powiązane problemy