Skip to content

Cabal repl without a cabal file #1801

Open
@hellwolf

Description

@hellwolf

Is it possible to load a Haskell file with embedded cabal build-depends, so that no extra cabal file is needed.

I have tried (haskell-process-type 'cabal-new-repl) and (haskell-process-type 'cabal-repl), both would ask me to add containers to haskell.cabal file which I am trying to avoid creating.

An example, cabal repl Store.hs would just work, but I cannot get it work in haskell-mode:

{- cabal:
build-depends: base, containers
-}

module Store (save1, load1, size1, save2, load2, size2) where

import           Control.Concurrent.MVar
import           Data.IORef
import qualified Data.Map                as M
import           System.IO.Unsafe

_m1 :: IORef (M.Map String String)
{-# NOINLINE _m1 #-}
_m1 = unsafePerformIO $ newIORef M.empty
save1 k v = modifyIORef _m1 $ M.insert k v
load1 k = M.findWithDefault "" k <$> readIORef _m1
size1 = M.size <$> readIORef _m1


_m2 :: MVar (M.Map String String)
{-# NOINLINE _m2 #-}
_m2 = unsafePerformIO $ newMVar M.empty
save2 k v = modifyMVar_ _m2 $ pure . M.insert k v
load2 k = M.findWithDefault "" k <$> readMVar _m2
size2 = M.size <$> readMVar _m2

test = do
  save1 "a" "42"
  save1 "b" "32"
  print =<< size1
  print =<< load1 "a"
  print =<< load1 "b"
  print =<< load1 "c"

  save2 "a" "42"
  save2 "b" "32"
  print =<< size2
  print =<< load2 "a"
  print =<< load2 "b"
  print =<< load2 "c"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions