module Deontic.Civil.Possession () where
import qualified Data.Set as Set
import Deontic.Core.Types
import Deontic.Core.Verdict
import Deontic.Core.Adjudicate
import Deontic.Core.Layer (Resolvable)
import Deontic.Civil.Types
type instance Resolvable PossessionAct = '[Rebuttal, Presumption]
instance Adjudicate PossessionAct '[Presumption] where
adjudicate :: PossessionAct -> Facts PossessionAct -> Judgment '[Presumption]
adjudicate PossessionAct
_ Facts PossessionAct
_ =
Verdict -> ArticleRef -> Text -> Judgment '[Presumption]
forall l. Verdict -> ArticleRef -> Text -> Judgment '[l]
JBase Verdict
Valid
(Text -> Int -> Maybe Int -> ArticleRef
ArticleRef Text
"민법" Int
197 (Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1))
Text
"점유자는 소유의 의사로 선의, 평온 및 공연하게 점유한 것으로 추정한다."
instance Adjudicate PossessionAct rest
=> Adjudicate PossessionAct (Rebuttal ': rest) where
adjudicate :: PossessionAct -> Facts PossessionAct -> Judgment (Rebuttal : rest)
adjudicate PossessionAct
act Facts PossessionAct
facts
| CivilFact
BadFaith CivilFact -> Set CivilFact -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set CivilFact
Facts PossessionAct
facts =
Judgment rest
-> Verdict -> ArticleRef -> Text -> Judgment (Rebuttal : rest)
forall (prev :: [*]) l.
Judgment prev
-> Verdict -> ArticleRef -> Text -> Judgment (l : prev)
JOverride (forall act (layers :: [*]).
Adjudicate act layers =>
act -> Facts act -> Judgment layers
adjudicate @_ @rest PossessionAct
act Facts PossessionAct
facts)
Verdict
Voidable
(Text -> Int -> Maybe Int -> ArticleRef
ArticleRef Text
"민법" Int
197 (Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1))
Text
"반증: 점유자가 악의로 점유한 것으로 인정됨."
| CivilFact
ViolentPossession CivilFact -> Set CivilFact -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set CivilFact
Facts PossessionAct
facts =
Judgment rest
-> Verdict -> ArticleRef -> Text -> Judgment (Rebuttal : rest)
forall (prev :: [*]) l.
Judgment prev
-> Verdict -> ArticleRef -> Text -> Judgment (l : prev)
JOverride (forall act (layers :: [*]).
Adjudicate act layers =>
act -> Facts act -> Judgment layers
adjudicate @_ @rest PossessionAct
act Facts PossessionAct
facts)
Verdict
Voidable
(Text -> Int -> Maybe Int -> ArticleRef
ArticleRef Text
"민법" Int
197 (Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1))
Text
"반증: 점유가 평온하지 아니한 것으로 인정됨."
| CivilFact
ClandestinePossession CivilFact -> Set CivilFact -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set CivilFact
Facts PossessionAct
facts =
Judgment rest
-> Verdict -> ArticleRef -> Text -> Judgment (Rebuttal : rest)
forall (prev :: [*]) l.
Judgment prev
-> Verdict -> ArticleRef -> Text -> Judgment (l : prev)
JOverride (forall act (layers :: [*]).
Adjudicate act layers =>
act -> Facts act -> Judgment layers
adjudicate @_ @rest PossessionAct
act Facts PossessionAct
facts)
Verdict
Voidable
(Text -> Int -> Maybe Int -> ArticleRef
ArticleRef Text
"민법" Int
197 (Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1))
Text
"반증: 점유가 공연하지 아니한 것으로 인정됨."
| CivilFact
NoOwnershipIntent CivilFact -> Set CivilFact -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set CivilFact
Facts PossessionAct
facts =
Judgment rest
-> Verdict -> ArticleRef -> Text -> Judgment (Rebuttal : rest)
forall (prev :: [*]) l.
Judgment prev
-> Verdict -> ArticleRef -> Text -> Judgment (l : prev)
JOverride (forall act (layers :: [*]).
Adjudicate act layers =>
act -> Facts act -> Judgment layers
adjudicate @_ @rest PossessionAct
act Facts PossessionAct
facts)
Verdict
Voidable
(Text -> Int -> Maybe Int -> ArticleRef
ArticleRef Text
"민법" Int
200 Maybe Int
forall a. Maybe a
Nothing)
Text
"반증: 소유의 의사가 없는 타주점유로 인정됨."
| Bool
otherwise =
Judgment rest -> Judgment (Rebuttal : rest)
forall (prev :: [*]) l. Judgment prev -> Judgment (l : prev)
JDelegate (forall act (layers :: [*]).
Adjudicate act layers =>
act -> Facts act -> Judgment layers
adjudicate @_ @rest PossessionAct
act Facts PossessionAct
facts)