diff --git a/src/Instructions/CharInstructions.hs b/src/Instructions/CharInstructions.hs index 9b59a11..0f3626f 100644 --- a/src/Instructions/CharInstructions.hs +++ b/src/Instructions/CharInstructions.hs @@ -7,4 +7,24 @@ instructionCharConcat :: State -> State instructionCharConcat state@(State {_char = c1 : c2 : cs, _string = ss}) = state{_char = cs, _string = [c1, c2] : ss} instructionCharConcat state = state +instructionCharFromFirstChar :: State -> State +instructionCharFromFirstChar state@(State {_char = cs, _string = s1 : ss}) = + if not $ null s1 + then state {_char = head s1 : cs, _string = ss} + else state +instructionCharFromFirstChar state = state +instructionCharFromLastChar :: State -> State +instructionCharFromLastChar state@(State {_char = cs, _string = s1 : ss}) = + if not $ null s1 + then state {_char = last s1 : cs, _string = ss} + else state +instructionCharFromLastChar state = state + +instructionCharFromNthChar :: State -> State +instructionCharFromNthChar state@(State {_char = cs, _string = s1 : ss, _int = i1 : is}) = + let + index = abs i1 `mod` length s1 + in + state{_char = s1 !! index : cs, _string = ss, _int = is} +instructionCharFromNthChar state = state diff --git a/src/Instructions/StringInstructions.hs b/src/Instructions/StringInstructions.hs index b15f3c7..0e99477 100644 --- a/src/Instructions/StringInstructions.hs +++ b/src/Instructions/StringInstructions.hs @@ -79,3 +79,7 @@ instructionStringRemoveAllString state = state instructionStringOccurrencesOfString :: State -> State instructionStringOccurrencesOfString state@(State {_string = s1 : s2 : ss, _int = is}) = state{_string = ss, _int = amtOccurences s1 s2 : is} instructionStringOccurrencesOfString state = state + +instructionStringInsertChar :: State -> State +instructionStringInsertChar state@(State {_string = s1 : ss, _char = c1 : cs, _int = i1 : is}) = state {_string = combineString [c1] (splitAt i1 s1) : ss, _char = cs, _int = is} +instructionStringInsertChar state = state