module MoreFileF(
  moreFileShellF,
  moreShellF,moreShellF',
  moreFileF
) where
import MoreF(moreF')
import Command
import CompOps((>==<), (>=^<), (>^=<), (>=^^<))
import Shells(unmappedShellF, unmappedSimpleShellF)
import Fudget
import FRequest
import ReadFileF(readFileF)
--import Message(Message(..))
import SpEither(toBothSP)
import Spops(concmapSP)
--import Xtypes
import EitherUtils(stripEither)
import FDefaults
import InputMsg(InputMsg)
import DialogueIO() -- instances, for hbc


moreShellF' :: Customiser TextF -> String -> F [String] (InputMsg (Int, String))
moreShellF' Customiser TextF
pmod String
name = String
-> F [String] (InputMsg (Int, String))
-> F [String] (InputMsg (Int, String))
forall i o. String -> F i o -> F i o
unmappedSimpleShellF String
name (F [String] (InputMsg (Int, String))
 -> F [String] (InputMsg (Int, String)))
-> F [String] (InputMsg (Int, String))
-> F [String] (InputMsg (Int, String))
forall a b. (a -> b) -> a -> b
$ Customiser TextF -> F [String] (InputMsg (Int, String))
moreF' Customiser TextF
pmod
moreShellF :: String -> F [String] (InputMsg (Int, String))
moreShellF = Customiser TextF -> String -> F [String] (InputMsg (Int, String))
moreShellF' Customiser TextF
forall a. Customiser a
standard

moreFileF :: F String (InputMsg (Int, String))
moreFileF :: F String (InputMsg (Int, String))
moreFileF = Customiser TextF -> F String (InputMsg (Int, String))
moreFileF' Customiser TextF
forall a. Customiser a
standard
moreFileF' :: Customiser TextF -> F String (InputMsg (Int, String))
moreFileF' Customiser TextF
pmod = Customiser TextF -> F [String] (InputMsg (Int, String))
moreF' Customiser TextF
pmod F [String] (InputMsg (Int, String))
-> ((String, Either IOError String) -> [String])
-> F (String, Either IOError String) (InputMsg (Int, String))
forall c d e. F c d -> (e -> c) -> F e d
>=^< (String, Either IOError String) -> [String]
forall a. Show a => (String, Either a String) -> [String]
contents F (String, Either IOError String) (InputMsg (Int, String))
-> F String (String, Either IOError String)
-> F String (InputMsg (Int, String))
forall a1 b a2. F a1 b -> F a2 a1 -> F a2 b
>==< F String (String, Either IOError String)
readFileF

moreFileShellF :: F String (InputMsg (Int, String))
moreFileShellF =
  let startcmds :: [FRequest]
startcmds = [XCommand -> FRequest
XCmd (XCommand -> FRequest) -> XCommand -> FRequest
forall a b. (a -> b) -> a -> b
$ String -> XCommand
StoreName String
"More Fudget"]
      titleK :: K String ho
titleK = KSP String ho -> K String ho
forall hi ho. KSP hi ho -> K hi ho
K{-kk-} (KSP String ho -> K String ho) -> KSP String ho -> K String ho
forall a b. (a -> b) -> a -> b
$ (Message FResponse String -> [Message FRequest ho])
-> KSP String ho
forall t b. (t -> [b]) -> SP t b
concmapSP Message FResponse String -> [Message FRequest ho]
forall a b. Message a String -> [Message FRequest b]
changeName  -- titleK never outputs anything
  in Either (InputMsg (Int, String)) (InputMsg (Int, String))
-> InputMsg (Int, String)
forall p. Either p p -> p
stripEither (Either (InputMsg (Int, String)) (InputMsg (Int, String))
 -> InputMsg (Int, String))
-> F (Either String String)
     (Either (InputMsg (Int, String)) (InputMsg (Int, String)))
-> F (Either String String) (InputMsg (Int, String))
forall a b e. (a -> b) -> F e a -> F e b
>^=< [FRequest]
-> K String (InputMsg (Int, String))
-> F String (InputMsg (Int, String))
-> F (Either String String)
     (Either (InputMsg (Int, String)) (InputMsg (Int, String)))
forall (t :: * -> *) a b c d.
Foldable t =>
t FRequest -> K a b -> F c d -> F (Either a c) (Either b d)
unmappedShellF [FRequest]
startcmds K String (InputMsg (Int, String))
forall ho. K String ho
titleK F String (InputMsg (Int, String))
moreFileF F (Either String String) (InputMsg (Int, String))
-> SP String (Either String String)
-> F String (InputMsg (Int, String))
forall c d e. F c d -> SP e c -> F e d
>=^^< SP String (Either String String)
forall b. SP b (Either b b)
toBothSP

contents :: (String, Either a String) -> [String]
contents (String
name,Either a String
file) =
  case Either a String
file of
    Right String
s -> String -> [String]
lines String
s
    Left a
err -> [String
nameString -> String -> String
forall a. [a] -> [a] -> [a]
++String
": "String -> String -> String
forall a. [a] -> [a] -> [a]
++a -> String
forall a. Show a => a -> String
show a
err] -- missing Show instance for IOError
    --Left err -> [name++": error"]

changeName :: Message a String -> [Message FRequest b]
changeName Message a String
msg =
  case Message a String
msg of
    High String
name -> [FRequest -> Message FRequest b
forall a b. a -> Message a b
Low (FRequest -> Message FRequest b) -> FRequest -> Message FRequest b
forall a b. (a -> b) -> a -> b
$ XCommand -> FRequest
XCmd (XCommand -> FRequest) -> XCommand -> FRequest
forall a b. (a -> b) -> a -> b
$ String -> XCommand
StoreName String
name, FRequest -> Message FRequest b
forall a b. a -> Message a b
Low (FRequest -> Message FRequest b) -> FRequest -> Message FRequest b
forall a b. (a -> b) -> a -> b
$ XCommand -> FRequest
XCmd XCommand
MapRaised]
    Message a String
_ -> []