module App.Model where
import Fitch.Proof
import Miso (DOMRef, MisoString, URI)
import Miso.Lens (Lens, lens)
import Miso.Lens.TH (makeLenses)
import Specification.Types
data DropLocation where
LineAddr :: NodeAddr -> DropLocation
LocationBin :: DropLocation
deriving (Int -> DropLocation -> ShowS
[DropLocation] -> ShowS
DropLocation -> String
(Int -> DropLocation -> ShowS)
-> (DropLocation -> String)
-> ([DropLocation] -> ShowS)
-> Show DropLocation
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DropLocation -> ShowS
showsPrec :: Int -> DropLocation -> ShowS
$cshow :: DropLocation -> String
show :: DropLocation -> String
$cshowList :: [DropLocation] -> ShowS
showList :: [DropLocation] -> ShowS
Show, DropLocation -> DropLocation -> Bool
(DropLocation -> DropLocation -> Bool)
-> (DropLocation -> DropLocation -> Bool) -> Eq DropLocation
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DropLocation -> DropLocation -> Bool
== :: DropLocation -> DropLocation -> Bool
$c/= :: DropLocation -> DropLocation -> Bool
/= :: DropLocation -> DropLocation -> Bool
Eq)
data SpawnType where
SpawnLine :: SpawnType
SpawnProof :: SpawnType
deriving (Int -> SpawnType -> ShowS
[SpawnType] -> ShowS
SpawnType -> String
(Int -> SpawnType -> ShowS)
-> (SpawnType -> String)
-> ([SpawnType] -> ShowS)
-> Show SpawnType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SpawnType -> ShowS
showsPrec :: Int -> SpawnType -> ShowS
$cshow :: SpawnType -> String
show :: SpawnType -> String
$cshowList :: [SpawnType] -> ShowS
showList :: [SpawnType] -> ShowS
Show, SpawnType -> SpawnType -> Bool
(SpawnType -> SpawnType -> Bool)
-> (SpawnType -> SpawnType -> Bool) -> Eq SpawnType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SpawnType -> SpawnType -> Bool
== :: SpawnType -> SpawnType -> Bool
$c/= :: SpawnType -> SpawnType -> Bool
/= :: SpawnType -> SpawnType -> Bool
Eq)
data Logic = Prop | FOL deriving (Int -> Logic -> ShowS
[Logic] -> ShowS
Logic -> String
(Int -> Logic -> ShowS)
-> (Logic -> String) -> ([Logic] -> ShowS) -> Show Logic
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Logic -> ShowS
showsPrec :: Int -> Logic -> ShowS
$cshow :: Logic -> String
show :: Logic -> String
$cshowList :: [Logic] -> ShowS
showList :: [Logic] -> ShowS
Show, Logic -> Logic -> Bool
(Logic -> Logic -> Bool) -> (Logic -> Logic -> Bool) -> Eq Logic
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Logic -> Logic -> Bool
== :: Logic -> Logic -> Bool
$c/= :: Logic -> Logic -> Bool
/= :: Logic -> Logic -> Bool
Eq)
canSpawnBefore :: NodeAddr -> SpawnType -> Bool
canSpawnBefore :: NodeAddr -> SpawnType -> Bool
canSpawnBefore (NAProof Int
n NodeAddr
na) SpawnType
st = NodeAddr -> SpawnType -> Bool
canSpawnBefore NodeAddr
na SpawnType
st
canSpawnBefore (NALine{}; NAAssumption{}; NodeAddr
NAConclusion; NodeAddr
NAAfterConclusion) SpawnType
SpawnLine =
Bool
True
canSpawnBefore (NALine{}; NodeAddr
NAConclusion) SpawnType
SpawnProof = Bool
True
canSpawnBefore NodeAddr
_ SpawnType
_ = Bool
False
data Action where
InitMathJAX :: DOMRef -> Action
OpenTooltip :: MisoString -> Bool -> Action
CloseTooltip :: Action
:: Action
SetProof :: Proof -> Action
PopState :: URI -> Action
Setup :: Action
Focus :: Either NodeAddr NodeAddr -> Action
Blur :: Either NodeAddr NodeAddr -> Action
Input :: MisoString -> DOMRef -> Action
ProcessInput :: MisoString -> Int -> Int -> Either NodeAddr NodeAddr -> Action
Change :: Action
Drop :: DropLocation -> Action
DragEnter :: NodeAddr -> Action
DragLeave :: Action
DragStart :: Either NodeAddr ProofAddr -> Action
DragEnd :: Action
SpawnStart :: SpawnType -> Action
NavigateForward :: Action
NavigateBackward :: Action
Resize :: Bool -> Action
Nop :: Action
type Pos = Int
data Model = Model
{ Model -> Maybe (Either NodeAddr NodeAddr)
_focusedLine :: Maybe (Either NodeAddr NodeAddr)
, Model -> [(Text, Proof)]
_exampleProofs :: [(Text, Proof)]
, Model -> Derivation
_emptyDerivation :: Derivation
, Model -> Proof
_proof :: Proof
, :: Bool
, Model -> Maybe (Either NodeAddr ProofAddr)
_dragTarget :: Maybe (Either NodeAddr ProofAddr)
, Model -> Maybe NodeAddr
_lastDragged :: Maybe NodeAddr
, Model -> Maybe SpawnType
_spawnType :: Maybe SpawnType
, Model -> Maybe NodeAddr
_currentHoverLine :: Maybe NodeAddr
, Model -> Bool
_dragging :: Bool
, Model -> [(Text, Text, Int)]
_operators :: [(Text, Text, Int)]
, Model -> [(Text, Text)]
_infixPreds :: [(Text, Text)]
, Model -> [(Text, Text)]
_quantifiers :: [(Text, Text)]
, Model -> Map Text (Int, Int)
_functionSymbols :: Map Text (Int, Pos)
, Model -> Map Text (Int, Int)
_predicateSymbols :: Map Text (Int, Pos)
, Model -> [(Text, RuleSpec)]
_rules :: [(Name, RuleSpec)]
, Model -> URI
_uri :: URI
, Model -> Logic
_logic :: Logic
, Model -> Maybe Text
_currentTooltip :: Maybe MisoString
, Model -> Bool
_onMobile :: Bool
}
deriving (Model -> Model -> Bool
(Model -> Model -> Bool) -> (Model -> Model -> Bool) -> Eq Model
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Model -> Model -> Bool
== :: Model -> Model -> Bool
$c/= :: Model -> Model -> Bool
/= :: Model -> Model -> Bool
Eq)
initialModel ::
Derivation ->
Proof ->
[(Text, Proof)] ->
[(Text, Text, Int)] ->
[(Text, Text)] ->
[(Text, Text)] ->
[(Name, RuleSpec)] ->
URI ->
Logic ->
Maybe Bool ->
Bool ->
Model
initialModel :: Derivation
-> Proof
-> [(Text, Proof)]
-> [(Text, Text, Int)]
-> [(Text, Text)]
-> [(Text, Text)]
-> [(Text, RuleSpec)]
-> URI
-> Logic
-> Maybe Bool
-> Bool
-> Model
initialModel
Derivation
emptyD
Proof
initialP
[(Text, Proof)]
ps
[(Text, Text, Int)]
operators
[(Text, Text)]
infixPreds
[(Text, Text)]
quantifiers
[(Text, RuleSpec)]
rules
URI
uri
Logic
logic
Maybe Bool
sidebarToggle
Bool
onMobile =
Model
{ _focusedLine :: Maybe (Either NodeAddr NodeAddr)
_focusedLine = Maybe (Either NodeAddr NodeAddr)
forall a. Maybe a
Nothing
, _exampleProofs :: [(Text, Proof)]
_exampleProofs = [(Text, Proof)]
ps
, _emptyDerivation :: Derivation
_emptyDerivation = Derivation
emptyD
, _proof :: Proof
_proof = Proof
initialP
, _sidebarToggle :: Bool
_sidebarToggle = Bool -> Maybe Bool -> Bool
forall a. a -> Maybe a -> a
fromMaybe (Bool -> Bool
not Bool
onMobile) Maybe Bool
sidebarToggle
, _dragTarget :: Maybe (Either NodeAddr ProofAddr)
_dragTarget = Maybe (Either NodeAddr ProofAddr)
forall a. Maybe a
Nothing
, _lastDragged :: Maybe NodeAddr
_lastDragged = Maybe NodeAddr
forall a. Maybe a
Nothing
, _spawnType :: Maybe SpawnType
_spawnType = Maybe SpawnType
forall a. Maybe a
Nothing
, _currentHoverLine :: Maybe NodeAddr
_currentHoverLine = Maybe NodeAddr
forall a. Maybe a
Nothing
, _dragging :: Bool
_dragging = Bool
False
, _operators :: [(Text, Text, Int)]
_operators = [(Text, Text, Int)]
operators
, _infixPreds :: [(Text, Text)]
_infixPreds = [(Text, Text)]
infixPreds
, _quantifiers :: [(Text, Text)]
_quantifiers = [(Text, Text)]
quantifiers
, _functionSymbols :: Map Text (Int, Int)
_functionSymbols = Map Text (Int, Int)
forall a. Monoid a => a
mempty
, _predicateSymbols :: Map Text (Int, Int)
_predicateSymbols = Map Text (Int, Int)
forall a. Monoid a => a
mempty
, _rules :: [(Text, RuleSpec)]
_rules = [(Text, RuleSpec)]
rules
, _uri :: URI
_uri = URI
uri
, _logic :: Logic
_logic = Logic
logic
, _currentTooltip :: Maybe Text
_currentTooltip = Maybe Text
forall a. Maybe a
Nothing
, _onMobile :: Bool
_onMobile = Bool
onMobile
}
$