gpt4 book ai didi

haskell - 是否可以导入具有名称解析优先级的库?

转载 作者:行者123 更新时间:2023-12-02 03:23:06 24 4
gpt4 key购买 nike

注意以下文件:

import Common
main = print (length [1,2,3])

Common 是一个库,它重组了 Prelude 中的函数,以便导出我喜欢的版本(即,基于折叠的函数而不是基于列表的函数)。这是命名冲突:

test.hs:3:15:
Ambiguous occurrence ‘length’
It could refer to either ‘Prelude.length’,
imported from ‘Prelude’ at test.hs:1:1
(and originally defined in ‘GHC.List’)
or ‘Common.length’, imported from ‘Common’ at test.hs:1:1-11

由于这个想法是在创建新文件时避免官僚作风,因此仅使用 Import Prelude hiding ... 在这里无济于事。有什么方法可以告诉 GHC 优先于 Common.hs 的定义而不是 Prelude 的定义?

最佳答案

无法确定优先级,但可以轻松覆盖个别名称。例如,要覆盖 length:

module Common where

import Prelude hiding (length)
import qualified Data.List

length :: Num n => [a] -> n
length = Data.List.genericLength

您可以在 ghci 中检查一切是否正常:

% ghci -XNoImplicitPrelude test.hs
GHCi, version 7.10.1: http://www.haskell.org/ghc/ :? for help
[1 of 1] Compiling Common ( test.hs, interpreted )
Ok, modules loaded: Common.
*Common> :t length
length :: Num n => [a] -> n
*Common> :t (+)
(+) :: Num a => a -> a -> a

关于haskell - 是否可以导入具有名称解析优先级的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31928461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com