<div dir="ltr"><div>{-</div><div><br></div><div>I want to override Prelude.^ (as an academic exercise).</div><div><br></div><div>Can it be done? How?</div><div><br></div><div>Trent</div><div><br></div><div>-}</div><div><br></div><div>(^) :: Int -> Int -> Int</div><div>m ^ 0 = 1 </div><div>m ^ n = m * (m ^ (n-1))</div><div><br></div><div>{-</div><div>Hutton, Graham. Programming in Haskell (p. 263). Cambridge University Press. Kindle Edition. 2016.</div><div>-}</div><div><br></div><div>{-</div><div><br></div><div>Result</div><div><br></div><div>[1 of 1] Compiling Main             ( ex6_3b.hs, interpreted )</div><div><br></div><div>ex6_3b.hs:3:16: error:</div><div>    Ambiguous occurrence ‘^’</div><div>    It could refer to either ‘Prelude.^’,</div><div>                             imported from ‘Prelude’ at ex6_3b.hs:1:1</div><div>                             (and originally defined in ‘GHC.Real’)</div><div>                          or ‘Main.^’, defined at ex6_3b.hs:2:3</div><div>  |</div><div>3 | m ^ n = m * (m ^ (n-1))   |                ^</div><div>Failed, no modules loaded.</div><div>-}</div><div><br></div><div>-- So I try</div><div><br></div><div>(^) :: Int -> Int -> Int</div><div>m Main.^ 0 = 1 </div><div>m Main.^ n = m * (m Main.^ (n-1))</div><div><br></div><div>{-</div><div><br></div><div>Result</div><div><br></div><div>Prelude> :reload</div><div><br></div><div>ex6_3b.hs:2:3: error: Qualified name in binding position: Main.^</div><div>  |</div><div>2 | m Main.^ 0 = 1    |   ^^^^^^</div><div>[1 of 1] Compiling Main             ( ex6_3b.hs, interpreted )</div><div>Failed, no modules loaded.</div><div><br></div><div>-}</div></div>