module Deontic.Civil.Tort () where
import Deontic.Core.Types
import Deontic.Core.Verdict
import Deontic.Core.Adjudicate
import Deontic.Core.Layer (Base, Resolvable)
import Deontic.Civil.Types
type instance Resolvable TortAct = '[ContributoryNeg, Base]
instance Adjudicate TortAct '[Base] where
adjudicate :: TortAct -> Facts TortAct -> Judgment '[Base]
adjudicate TortAct
_ Facts TortAct
facts
| TortFacts -> Bool
tfFault Facts TortAct
TortFacts
facts Bool -> Bool -> Bool
&& TortFacts -> Bool
tfUnlawful Facts TortAct
TortFacts
facts
Bool -> Bool -> Bool
&& TortFacts -> Bool
tfDamage Facts TortAct
TortFacts
facts Bool -> Bool -> Bool
&& TortFacts -> Bool
tfCausation Facts TortAct
TortFacts
facts =
Verdict -> ArticleRef -> Text -> Judgment '[Base]
forall l. Verdict -> ArticleRef -> Text -> Judgment '[l]
JBase Verdict
Void
(Text -> Int -> Maybe Int -> ArticleRef
ArticleRef Text
"민법" Int
750 Maybe Int
forall a. Maybe a
Nothing)
Text
"고의 또는 과실로 인한 위법행위로 타인에게 손해를 가한 자는 그 손해를 배상할 책임이 있다."
| Bool
otherwise =
Verdict -> ArticleRef -> Text -> Judgment '[Base]
forall l. Verdict -> ArticleRef -> Text -> Judgment '[l]
JBase Verdict
Valid
(Text -> Int -> Maybe Int -> ArticleRef
ArticleRef Text
"민법" Int
750 Maybe Int
forall a. Maybe a
Nothing)
Text
"불법행위의 요건이 충족되지 아니하여 손해배상 책임이 없다."
instance Adjudicate TortAct rest
=> Adjudicate TortAct (ContributoryNeg ': rest) where
adjudicate :: TortAct -> Facts TortAct -> Judgment (ContributoryNeg : rest)
adjudicate TortAct
act Facts TortAct
facts
| TortFacts -> Bool
tfVictimNeg Facts TortAct
TortFacts
facts
, let prev :: Judgment rest
prev = forall act (layers :: [*]).
Adjudicate act layers =>
act -> Facts act -> Judgment layers
adjudicate @_ @rest TortAct
act Facts TortAct
facts
, Judgment rest -> Verdict
forall (layers :: [*]). Judgment layers -> Verdict
verdict Judgment rest
prev Verdict -> Verdict -> Bool
forall a. Eq a => a -> a -> Bool
== Verdict
Void =
Judgment rest
-> Verdict
-> ArticleRef
-> Text
-> Judgment (ContributoryNeg : rest)
forall (prev :: [*]) l.
Judgment prev
-> Verdict -> ArticleRef -> Text -> Judgment (l : prev)
JOverride Judgment rest
prev
Verdict
Voidable
(Text -> Int -> Maybe Int -> ArticleRef
ArticleRef Text
"민법" Int
396 Maybe Int
forall a. Maybe a
Nothing)
Text
"피해자에게도 과실이 있으므로 과실상계에 의하여 손해배상 책임이 감경된다."
| Bool
otherwise =
Judgment rest -> Judgment (ContributoryNeg : rest)
forall (prev :: [*]) l. Judgment prev -> Judgment (l : prev)
JDelegate (forall act (layers :: [*]).
Adjudicate act layers =>
act -> Facts act -> Judgment layers
adjudicate @_ @rest TortAct
act Facts TortAct
facts)