Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Module X appears in multiple packages

I am writing a short Turtle script in Haskell, running it with Stack:

#!/usr/bin/env stack
-- stack --resolver lts-19.6 script
                                    
{-# LANGUAGE OverloadedStrings #-}  
                                    
import Turtle                       
import Data.Text 

But as soon I added the "Data.Text" import I get this error:

Module Data.Text appears in multiple packages: 
relude text

Not a typo, it really says "relude".

How can I resolve it?

like image 554
Boris Marinov Avatar asked Oct 12 '25 23:10

Boris Marinov


1 Answers

You can fix this by explicitly specifying which packages you want to use:

#!/usr/bin/env stack
-- stack --resolver lts-19.6 script --package text --package turtle
                                    
{-# LANGUAGE OverloadedStrings #-}  
                                    
import Turtle                       
import Data.Text 

I think by default it exposes all packages in the snapshot, so then there indeed may be multiple packages that provide the same module, which stack cannot resolve by itself.

An alternative solution would be to use PackageImports:

#!/usr/bin/env stack
-- stack --resolver lts-19.6 script
                                    
{-# LANGUAGE OverloadedStrings, PackageImports #-}  
                                    
import Turtle                       
import "text" Data.Text 

Do take a look at the documentation for best practices:

https://docs.haskellstack.org/en/stable/scripts/

like image 121
Noughtmare Avatar answered Oct 14 '25 18:10

Noughtmare