-
Notifications
You must be signed in to change notification settings - Fork 15
Open
Description
If any program in the PATH is called the same as any of the following identifiers, there is some risk that Data.Conduit.Shell fails to build as in:
shell-conduit $ touch fuse
shell-conduit $ chmod +x fuse
shell-conduit $ PATH=$(pwd):$PATH stack ghci
...
/home/facundo/tweag/shell-conduit/src/Data/Conduit/Shell.hs:111:4: error:
Conflicting exports for ‘fuse’:
‘module Data.Conduit’ exports ‘Data.Conduit.fuse’
imported from ‘Data.Conduit’ at /home/facundo/tweag/shell-conduit/src/Data/Conduit/Shell.hs:114:1-19
‘module Data.Conduit.Shell.PATH’ exports ‘Data.Conduit.Shell.PATH.fuse’
imported from ‘Data.Conduit.Shell.PATH’ at /home/facundo/tweag/shell-conduit/src/Data/Conduit/Shell.hs:115:1-47
(and originally defined
at /home/facundo/tweag/shell-conduit/src/Data/Conduit/Shell/PATH.hs:29:3-18)
|
111 | ,module Data.Conduit)
Data.Conduit.Shell.Process.ProcessEmpty ::
Data.Conduit.Shell.Process.ProcessException ::
Data.Conduit.Shell.Types.ShellEmpty ::
Data.Conduit.Shell.Types.ShellExitFailure ::
Data.Conduit.Shell.Types.ShellT ::
Data.Conduit.Shell.Types.StMShell ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.ZipConduit ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.ZipSink ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.ZipSource ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.addCleanup ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.await ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.awaitForever ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.bracketP ::
Data.Conduit.Shell.Process.bytes ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.catchC ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.closeResumableSource ::
Data.Conduit.Shell.Process.conduit ::
Data.Conduit.connect ::
Data.Conduit.fuse ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.fuseBoth ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.fuseBothMaybe ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.fuseLeftovers ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.fuseReturnLeftovers ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.fuseUpstream ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.getZipConduit ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.getZipSink ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.getZipSource ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.handleC ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.leftover ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.mapInput ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.mapOutput ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.mapOutputMaybe ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.mergeSource ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.newResumableConduit ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.newResumableSource ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.passthroughSink ::
Data.Conduit.Shell.Process.proc ::
Data.Conduit.Shell.Process.run ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.runConduit ::
Data.Conduit.runConduitPure ::
Data.Conduit.runConduitRes ::
Data.Conduit.Shell.Types.runShellT ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.sequenceConduits ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.sequenceSinks ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.sequenceSources ::
Data.Conduit.Shell.Process.shell ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.sourceToList ::
Data.Conduit.Shell.Variadic.spr ::
Data.Conduit.Shell.Process.text ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.toConsumer ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.toProducer ::
Data.Conduit.Shell.Variadic.toTextArg ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.transPipe ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.tryC ::
Data.Conduit.Shell.Types.unStMGeoServer ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.unwrapResumable ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.unwrapResumableConduit ::
Data.Conduit.Shell.Variadic.variadicProcess ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.yield ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.yieldM ::
conduit-1.2.12.1:Data.Conduit.Internal.Conduit.yieldOr ::
Some mechanisms needs to be put in place to make sure that the names produced in Data.Conduit.Shell.PATH do not collide with the export list of Data.Conduit.Shell.
Additionally, the user should probably be warned to protect against program names in the PATH clashing with identifiers in his own modules when importing Data.Conduit.Shell.PATH or Data.Conduit.Shell by using qualified imports or explicit import lists.
Metadata
Metadata
Assignees
Labels
No labels