module CompletionStringF
(stdcc,completeFromList,
completionStringF,completionStringF',completionStringF'')
where
import Fudgets
import Data.List(isPrefixOf)
import HbcUtils(mapSnd)
completionStringF :: F (Either ([Char] -> [(a, [Char])]) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
completionStringF = Char
-> Customiser StringF
-> F (Either ([Char] -> [(a, [Char])]) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall a.
Char
-> Customiser StringF
-> F (Either ([Char] -> [(a, [Char])]) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
completionStringF' Char
stdcc Customiser StringF
forall a. Customiser a
standard
stdcc :: Char
stdcc = [Char] -> Char -> Char
forall p. (Read p, Show p) => [Char] -> p -> p
argReadKey [Char]
"stdcc" Char
' '
completionStringF' :: Char
-> Customiser StringF
-> F (Either ([Char] -> [(a, [Char])]) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
completionStringF' Char
cc Customiser StringF
cust = Char
-> Customiser StringF
-> F (Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char]))
(Either [(a, [Char])] (InputMsg [Char]))
forall a.
Char
-> Customiser StringF
-> F (Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char]))
(Either [(a, [Char])] (InputMsg [Char]))
completionStringF'' Char
cc Customiser StringF
cust F (Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char]))
(Either [(a, [Char])] (InputMsg [Char]))
-> (Either ([Char] -> [(a, [Char])]) [Char]
-> Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char]))
-> F (Either ([Char] -> [(a, [Char])]) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall c d e. F c d -> (e -> c) -> F e d
>=^< (([Char] -> [(a, [Char])]) -> [Char] -> [(a, [Char])])
-> ([Char] -> Either (Customiser StringF) [Char])
-> Either ([Char] -> [(a, [Char])]) [Char]
-> Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])
forall t1 a t2 b.
(t1 -> a) -> (t2 -> b) -> Either t1 t2 -> Either a b
mapEither ([Char] -> [(a, [Char])]) -> [Char] -> [(a, [Char])]
forall a. Customiser a
id [Char] -> Either (Customiser StringF) [Char]
forall a b. b -> Either a b
Right
completionStringF'' :: Char
-> Customiser StringF
-> F (Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char]))
(Either [(a, [Char])] (InputMsg [Char]))
completionStringF'' Char
cc Customiser StringF
cust =
F (Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> F (Either (Customiser StringF) [Char]) (InputMsg [Char])
-> F (Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char]))
(Either [(a, [Char])] (InputMsg [Char]))
forall a b c d. F (Either a b) (Either c d) -> F c a -> F b d
loopThroughRightF (SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> F (Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a b. SP a b -> F a b
absF SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a.
SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
completeSP0) (Customiser StringF
-> F (Either (Customiser StringF) [Char]) (InputMsg [Char])
stringF'' Customiser StringF
cust)
where
completeSP0 :: SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
completeSP0 = ([Char] -> [(a, [Char])])
-> ([(a, [Char])], [(a, [Char])])
-> [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a.
([Char] -> [(a, [Char])])
-> ([(a, [Char])], [(a, [Char])])
-> [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
completeSP ([(a, [Char])] -> [Char] -> [(a, [Char])]
forall a b. a -> b -> a
const []) ([],[]) [Char]
""
completeSP :: ([Char] -> [(a, [Char])])
-> ([(a, [Char])], [(a, [Char])])
-> [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
completeSP [Char] -> [(a, [Char])]
listfun ([(a, [Char])], [(a, [Char])])
updownlist [Char]
current =
Cont
(SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
forall a b. Cont (SP a b) a
getSP Cont
(SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
-> Cont
(SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
forall a b. (a -> b) -> a -> b
$ (InputMsg [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> (Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char]))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either InputMsg [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
fromStringF Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
fromOutside
where
list :: [(a, [Char])]
list = [Char] -> [(a, [Char])]
listfun [Char]
current
same :: SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
same = ([Char] -> [(a, [Char])])
-> ([(a, [Char])], [(a, [Char])])
-> [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
completeSP [Char] -> [(a, [Char])]
listfun ([(a, [Char])], [(a, [Char])])
updownlist [Char]
current
newList :: ([Char] -> [(a, [Char])])
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
newList [Char] -> [(a, [Char])]
listfun' = ([Char] -> [(a, [Char])])
-> ([(a, [Char])], [(a, [Char])])
-> [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
completeSP [Char] -> [(a, [Char])]
listfun' ([],[]) [Char]
current
newString' :: ([(a, [Char])], [(a, [Char])])
-> [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
newString' ([(a, [Char])], [(a, [Char])])
p [Char]
s = Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall b a. b -> SP a b -> SP a b
putSP (InputMsg [Char]
-> Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall b a a. b -> Either a (Either a b)
toOutput ([Char] -> InputMsg [Char]
forall a. a -> InputMsg a
InputChange [Char]
s)) (SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a b. (a -> b) -> a -> b
$
([Char] -> [(a, [Char])])
-> ([(a, [Char])], [(a, [Char])])
-> [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
completeSP [Char] -> [(a, [Char])]
listfun ([(a, [Char])], [(a, [Char])])
p [Char]
s
newString :: [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
newString = ([(a, [Char])], [(a, [Char])])
-> [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
newString' ([],[])
toStringF'' :: a -> Either a b
toStringF'' = a -> Either a b
forall a b. a -> Either a b
Left
toString :: b -> Either (Either a b) b
toString = Either a b -> Either (Either a b) b
forall a b. a -> Either a b
toStringF'' (Either a b -> Either (Either a b) b)
-> (b -> Either a b) -> b -> Either (Either a b) b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b -> Either a b
forall a b. b -> Either a b
Right
toCustomiser :: a -> Either (Either a b) b
toCustomiser = Either a b -> Either (Either a b) b
forall a b. a -> Either a b
toStringF'' (Either a b -> Either (Either a b) b)
-> (a -> Either a b) -> a -> Either (Either a b) b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Either a b
forall a b. a -> Either a b
Left
toOutput :: b -> Either a (Either a b)
toOutput = Either a b -> Either a (Either a b)
forall a b. b -> Either a b
Right (Either a b -> Either a (Either a b))
-> (b -> Either a b) -> b -> Either a (Either a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b -> Either a b
forall a b. b -> Either a b
Right
toCompletionList :: a -> Either a (Either a b)
toCompletionList = Either a b -> Either a (Either a b)
forall a b. b -> Either a b
Right (Either a b -> Either a (Either a b))
-> (a -> Either a b) -> a -> Either a (Either a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Either a b
forall a b. a -> Either a b
Left
fromOutside :: Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
fromOutside = (([Char] -> [(a, [Char])])
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> (Either (Customiser StringF) [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either ([Char] -> [(a, [Char])])
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
newList Either (Customiser StringF) [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
inputToStringF''
inputToStringF'' :: Either (Customiser StringF) [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
inputToStringF'' Either (Customiser StringF) [Char]
msg = Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall b a. b -> SP a b -> SP a b
putSP (Either (Customiser StringF) [Char]
-> Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall a b. a -> Either a b
toStringF'' Either (Customiser StringF) [Char]
msg) SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
same
fromStringF :: InputMsg [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
fromStringF InputMsg [Char]
msg =
case InputMsg [Char]
msg of
InputDone [Char]
"Up" [Char]
_ -> ([(a, [Char])], [(a, [Char])])
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
goto ([(a, [Char])], [(a, [Char])])
above
InputDone [Char]
"Down" [Char]
_ -> ([(a, [Char])], [(a, [Char])])
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
goto ([(a, [Char])], [(a, [Char])])
below
InputDone [Char]
"Tab" [Char]
_ -> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
doCompletion
InputDone [Char]
_ [Char]
_ -> Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall b a. b -> SP a b -> SP a b
putSP (InputMsg [Char]
-> Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall b a a. b -> Either a (Either a b)
toOutput InputMsg [Char]
msg) SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
same
InputChange [Char]
s ->
if [Char]
s[Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
==[Char]
current[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++[Char
cc]
then SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
doCompletion
else if [Char] -> Bool
fromupdownlist [Char]
s
then SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
same
else [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
newString [Char]
s
fromupdownlist :: [Char] -> Bool
fromupdownlist [Char]
s =
case ([(a, [Char])], [(a, [Char])])
updownlist of
(_,(_,s'):_) -> [Char]
s[Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
==[Char]
s'
([(a, [Char])], [(a, [Char])])
_ -> Bool
False
goto :: ([(a, [Char])], [(a, [Char])])
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
goto ([(a, [Char])]
_,[]) = SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
same
goto l :: ([(a, [Char])], [(a, [Char])])
l@([(a, [Char])]
_,item :: (a, [Char])
item@(a
_,[Char]
s):[(a, [Char])]
_) =
Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall b a. b -> SP a b -> SP a b
putSP ([Char]
-> Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall b a b. b -> Either (Either a b) b
toString [Char]
s) (SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a b. (a -> b) -> a -> b
$
Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall b a. b -> SP a b -> SP a b
putSP ([(a, [Char])]
-> Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall a a b. a -> Either a (Either a b)
toCompletionList [(a, [Char])
item]) (SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a b. (a -> b) -> a -> b
$
Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall b a. b -> SP a b -> SP a b
putSP (InputMsg [Char]
-> Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall b a a. b -> Either a (Either a b)
toOutput ([Char] -> InputMsg [Char]
forall a. a -> InputMsg a
InputChange [Char]
s)) (SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a b. (a -> b) -> a -> b
$
([(a, [Char])], [(a, [Char])])
-> [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
newString' ([(a, [Char])], [(a, [Char])])
l [Char]
current
above :: ([(a, [Char])], [(a, [Char])])
above = case ([(a, [Char])], [(a, [Char])])
updownlist of
([],[]) -> case [(a, [Char])] -> [(a, [Char])]
forall a. [a] -> [a]
reverse [(a, [Char])]
updownlist' of
(a, [Char])
x:[(a, [Char])]
xs -> ([(a, [Char])]
xs,[(a, [Char])
x])
[(a, [Char])]
_ -> ([],[])
(x:xs,ys) -> ([(a, [Char])]
xs,(a, [Char])
x(a, [Char]) -> [(a, [Char])] -> [(a, [Char])]
forall a. a -> [a] -> [a]
:[(a, [Char])]
ys)
([(a, [Char])], [(a, [Char])])
_ -> ([(a, [Char])], [(a, [Char])])
updownlist
below :: ([(a, [Char])], [(a, [Char])])
below = case ([(a, [Char])], [(a, [Char])])
updownlist of
([],[]) -> ([],[(a, [Char])]
updownlist')
(xs,x1:x2:ys) -> ((a, [Char])
x1(a, [Char]) -> [(a, [Char])] -> [(a, [Char])]
forall a. a -> [a] -> [a]
:[(a, [Char])]
xs,(a, [Char])
x2(a, [Char]) -> [(a, [Char])] -> [(a, [Char])]
forall a. a -> [a] -> [a]
:[(a, [Char])]
ys)
([(a, [Char])], [(a, [Char])])
_ -> ([(a, [Char])], [(a, [Char])])
updownlist
updownlist' :: [(a, [Char])]
updownlist' = ([Char] -> [Char]) -> [(a, [Char])] -> [(a, [Char])]
forall t b a. (t -> b) -> [(a, t)] -> [(a, b)]
mapSnd ([Char]
current[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++) [(a, [Char])]
list
doCompletion :: SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
doCompletion =
Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall b a. b -> SP a b -> SP a b
putSP ([(a, [Char])]
-> Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall a a b. a -> Either a (Either a b)
toCompletionList [(a, [Char])]
list) (SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a b. (a -> b) -> a -> b
$
[Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
putNewString ([Char]
current[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++[[Char]] -> [Char]
forall a. Eq a => [[a]] -> [a]
commonPrefix (((a, [Char]) -> [Char]) -> [(a, [Char])] -> [[Char]]
forall a b. (a -> b) -> [a] -> [b]
map (a, [Char]) -> [Char]
forall a b. (a, b) -> b
snd [(a, [Char])]
list))
putNewString :: [Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
putNewString [Char]
new =
Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall b a. b -> SP a b -> SP a b
putSP ([Char]
-> Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall b a b. b -> Either (Either a b) b
toString [Char]
new) (SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a b. (a -> b) -> a -> b
$
Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall b a. b -> SP a b -> SP a b
putSP (Customiser StringF
-> Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))
forall a b b. a -> Either (Either a b) b
toCustomiser (Int -> Customiser StringF
setCursorPos ([Char] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Char]
new))) (SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char]))))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
forall a b. (a -> b) -> a -> b
$
[Char]
-> SP
(Either
(InputMsg [Char])
(Either
([Char] -> [(a, [Char])]) (Either (Customiser StringF) [Char])))
(Either
(Either (Customiser StringF) [Char])
(Either [(a, [Char])] (InputMsg [Char])))
newString [Char]
new
commonPrefix :: [[a]] -> [a]
commonPrefix ((a
c:[a]
s):[[a]]
ss) =
case ([a] -> Bool) -> [[a]] -> [[a]]
forall a. (a -> Bool) -> [a] -> [a]
filter (([a] -> [a] -> Bool
forall a. Eq a => a -> a -> Bool
/=[a
c])([a] -> Bool) -> ([a] -> [a]) -> [a] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
take Int
1) [[a]]
ss of
[] -> a
ca -> [a] -> [a]
forall a. a -> [a] -> [a]
:[[a]] -> [a]
commonPrefix ([a]
s[a] -> [[a]] -> [[a]]
forall a. a -> [a] -> [a]
:([a] -> [a]) -> [[a]] -> [[a]]
forall a b. (a -> b) -> [a] -> [b]
map [a] -> [a]
forall a. [a] -> [a]
tail [[a]]
ss)
[[a]]
_ -> []
commonPrefix [[a]]
_ = []
pos :: [a] -> [[a]] -> (Int, Bool)
pos [a]
y [[a]]
xs =
case [(Int, [a])
ix|ix :: (Int, [a])
ix@(Int
i,[a]
x)<-Int -> [[a]] -> [(Int, [a])]
forall a. Int -> [a] -> [(Int, a)]
number Int
0 [[a]]
xs,[a]
y [a] -> [a] -> Bool
forall a. Eq a => [a] -> [a] -> Bool
`isPrefixOf` [a]
x] of
[] -> (Int
0,Bool
False)
(Int
i,[a]
x):[(Int, [a])]
_ -> (Int
i,[a]
x[a] -> [a] -> Bool
forall a. Eq a => a -> a -> Bool
==[a]
y)
completeFromList :: [[a]] -> [a] -> [([a], [a])]
completeFromList [[a]]
list [a]
current =
[([a]
current,[a]
compl)|([a]
pre,[a]
compl)<-[([a], [a])]
splits,[a]
pre[a] -> [a] -> Bool
forall a. Eq a => a -> a -> Bool
==[a]
current]
where
splits :: [([a], [a])]
splits = ([a] -> ([a], [a])) -> [[a]] -> [([a], [a])]
forall a b. (a -> b) -> [a] -> [b]
map (Int -> [a] -> ([a], [a])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
n) [[a]]
list
n :: Int
n = [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
current