summaryrefslogtreecommitdiff
path: root/testsuite/tests/pmcheck/should_compile/T11822.hs
blob: 01afdf46c3ae11136d868af5e30d9376af2e63b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{-# OPTIONS_GHC -Wincomplete-patterns -fforce-recomp #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE GeneralisedNewtypeDeriving #-}

module T11822 where

import Data.Sequence (Seq, pattern (:<|))
import Data.Set (Set)

newtype SiblingDependencies = SiblingDependencies Int
  deriving (Eq, Ord, Enum, Integral, Real, Num)

newtype Depth = Depth Int
  deriving (Eq, Ord, Enum, Integral, Real, Num)

data TreeNode prefix
  = OnlyChild prefix
  | LeafLast prefix
  | LeafMid prefix
  | NodeLast prefix
  | NodeMid prefix
  | PrefixedLast prefix (Seq SiblingDependencies) (Set prefix) Depth
  | PrefixedMid prefix (Seq SiblingDependencies) (Set prefix) Depth

mkTreeNode
  :: Ord prefix
  => prefix
  -> Seq SiblingDependencies
  -> Set prefix
  -> Depth
  -> TreeNode prefix
mkTreeNode t     []      _   _   = OnlyChild t
mkTreeNode t     [0]    []   _   = LeafLast t
mkTreeNode t     [_]    []   _   = LeafMid t
mkTreeNode t     [0]     _   0   = LeafLast t
mkTreeNode t     [_]     _   0   = LeafMid t
mkTreeNode t     [0]     _   _   = NodeLast t
mkTreeNode t     [_]     _   _   = NodeMid t
mkTreeNode t (0 :<| ns) ds depth = PrefixedLast t ns ds depth
mkTreeNode t (_ :<| ns) ds depth = PrefixedMid t ns ds depth