Cleanup
This commit is contained in:
@@ -45,13 +45,13 @@ anoToRoomTree anos = case anos of
|
|||||||
[AnoApplyInt i f] -> f i
|
[AnoApplyInt i f] -> f i
|
||||||
[SetLabel i randrm] -> do
|
[SetLabel i randrm] -> do
|
||||||
rm <- randrm
|
rm <- randrm
|
||||||
return . connectRoom $ rm & rmLabel ?~ i
|
return . singleUseAll $ rm & rmLabel ?~ i
|
||||||
[UseLabel i randrm] -> do
|
[UseLabel i randrm] -> do
|
||||||
rm <- randrm
|
rm <- randrm
|
||||||
return $ connectRoom $ rm & rmTakeFrom ?~ i
|
return $ singleUseAll $ rm & rmTakeFrom ?~ i
|
||||||
[ChainAnos ass] -> do
|
[ChainAnos ass] -> do
|
||||||
rms <- mapM anoToRoomTree ass
|
rms <- mapM anoToRoomTree ass
|
||||||
return $ linkEitherTrees rms
|
return $ chainUses rms
|
||||||
[OrAno as] -> do
|
[OrAno as] -> do
|
||||||
a <- takeOne as
|
a <- takeOne as
|
||||||
anoToRoomTree a
|
anoToRoomTree a
|
||||||
@@ -60,7 +60,7 @@ anoToRoomTree anos = case anos of
|
|||||||
[FirstWeapon] -> do
|
[FirstWeapon] -> do
|
||||||
branchWP <- branchRectWith weaponRoom
|
branchWP <- branchRectWith weaponRoom
|
||||||
blockedC <- longBlockedCorridor
|
blockedC <- longBlockedCorridor
|
||||||
join $ takeOne $ return (appendEitherTree branchWP [blockedC]) : replicate 5 weaponRoom
|
join $ takeOne $ return (passUntilUseAll branchWP [blockedC]) : replicate 5 weaponRoom
|
||||||
[EndRoom] -> fmap (pure . UseAll) (telRoomLev 1)
|
[EndRoom] -> fmap (pure . UseAll) (telRoomLev 1)
|
||||||
(SpecificRoom rt:_) -> rt
|
(SpecificRoom rt:_) -> rt
|
||||||
(BossAno cr : _) -> do
|
(BossAno cr : _) -> do
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import Dodge.Data
|
|||||||
import Dodge.Room
|
import Dodge.Room
|
||||||
import Dodge.Tree.Compose.Data
|
import Dodge.Tree.Compose.Data
|
||||||
|
|
||||||
import Data.Tree
|
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
data Annotation g
|
data Annotation g
|
||||||
|
|||||||
+1
-1
@@ -94,7 +94,7 @@ initialAnoTree = padSucWithCorridors $ treeFromTrunk
|
|||||||
{- | A test level tree. -}
|
{- | A test level tree. -}
|
||||||
initialRoomTree :: RandomGen g => State g (Tree Room)
|
initialRoomTree :: RandomGen g => State g (Tree Room)
|
||||||
initialRoomTree = do
|
initialRoomTree = do
|
||||||
expandTreeBy id <$> mapM anoToRoomTree initialAnoTree
|
expandTree <$> mapM anoToRoomTree initialAnoTree
|
||||||
|
|
||||||
layoutLevelFromSeed :: Int -> Int -> IO [Room]
|
layoutLevelFromSeed :: Int -> Int -> IO [Room]
|
||||||
layoutLevelFromSeed i seed = do
|
layoutLevelFromSeed i seed = do
|
||||||
|
|||||||
@@ -21,7 +21,5 @@ branchRectWith t = do
|
|||||||
y <- state $ randomR (100,200)
|
y <- state $ randomR (100,200)
|
||||||
b <- t
|
b <- t
|
||||||
root <- randomiseOutLinks $ roomRectAutoLinks x y
|
root <- randomiseOutLinks $ roomRectAutoLinks x y
|
||||||
return $ Node (PassDown root) [Node (UseAll door) [], rToL <$> treeFromTrunk [PassDown door] b]
|
return $ Node (PassDown root) [Node (UseAll door) [], changeToPassDown <$>
|
||||||
where
|
treeFromTrunk [PassDown door] b]
|
||||||
rToL (UseAll r) = PassDown r
|
|
||||||
rToL (PassDown r) = PassDown r
|
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import Dodge.RandomHelp
|
|||||||
import Dodge.Creature
|
import Dodge.Creature
|
||||||
import Dodge.Tree
|
import Dodge.Tree
|
||||||
|
|
||||||
import Data.Tree
|
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
import System.Random
|
import System.Random
|
||||||
|
|||||||
+13
-21
@@ -77,7 +77,7 @@ glassLesson = do
|
|||||||
corridors <- replicateM i $ PassDown <$> randomiseOutLinks corridor
|
corridors <- replicateM i $ PassDown <$> randomiseOutLinks corridor
|
||||||
return $ Node (PassDown botRoom) [singleUseNone door,uppers, treeFromPost (PassDown door : corridors) $ UseAll door]
|
return $ Node (PassDown botRoom) [singleUseNone door,uppers, treeFromPost (PassDown door : corridors) $ UseAll door]
|
||||||
where
|
where
|
||||||
uppers = Node (PassDown door) [deadRoom topRoom]
|
uppers = Node (PassDown door) [singleUseNone topRoom]
|
||||||
botRoom = set rmPmnts botplmnts $ roomRect 200 200 1 1
|
botRoom = set rmPmnts botplmnts $ roomRect 200 200 1 1
|
||||||
topRoom = set rmPmnts topplmnts $ roomRect 200 200 1 1
|
topRoom = set rmPmnts topplmnts $ roomRect 200 200 1 1
|
||||||
botplmnts =
|
botplmnts =
|
||||||
@@ -171,7 +171,7 @@ miniRoom3 = do
|
|||||||
,sPS cp (pi/8+7*pi/4) b
|
,sPS cp (pi/8+7*pi/4) b
|
||||||
,sPS (V2 (w/2) (h/2)) 0 putLamp
|
,sPS (V2 (w/2) (h/2)) 0 putLamp
|
||||||
]
|
]
|
||||||
fmap connectRoom $ randomiseOutLinks $ set rmPmnts plmnts $ roomRectAutoLinks w h
|
fmap singleUseAll $ randomiseOutLinks $ set rmPmnts plmnts $ roomRectAutoLinks w h
|
||||||
|
|
||||||
rot90Around :: Point2 -> Point2 -> Point2
|
rot90Around :: Point2 -> Point2 -> Point2
|
||||||
rot90Around cen p = cen +.+ vNormal (p -.- cen)
|
rot90Around cen p = cen +.+ vNormal (p -.- cen)
|
||||||
@@ -179,17 +179,9 @@ rot90Around cen p = cen +.+ vNormal (p -.- cen)
|
|||||||
-- So, the idea is to attach outer children to the bottommost right nodes
|
-- So, the idea is to attach outer children to the bottommost right nodes
|
||||||
-- inside an inner tree
|
-- inside an inner tree
|
||||||
roomMiniIntro :: RandomGen g => State g (SubCompTree Room)
|
roomMiniIntro :: RandomGen g => State g (SubCompTree Room)
|
||||||
roomMiniIntro = fmap (g . expandTreeBy f) $ sequence $ treeFromPost
|
roomMiniIntro = do
|
||||||
[return $ connectRoom door
|
midroom <- join $ takeOne [miniTree2,glassLesson]
|
||||||
,join $ takeOne [miniTree2,glassLesson]
|
return $ chainUses $ [return $ UseAll door, midroom,return $ UseAll corridor]
|
||||||
]
|
|
||||||
$ connectRoom <$> randomiseOutLinks corridor
|
|
||||||
where
|
|
||||||
f (Node (UseAll x) xs) = Node (UseAll (UseAll x)) $ map f xs
|
|
||||||
f (Node (PassDown x) xs) = Node (PassDown (PassDown x)) $ map f xs
|
|
||||||
g (Node (UseAll x) []) = Node (UseAll x) []
|
|
||||||
g (Node (UseAll x) xs) = Node (PassDown x) $ map g xs
|
|
||||||
g (Node y ys) = Node y $ map g ys
|
|
||||||
|
|
||||||
roomCenterPillar :: RandomGen g => State g Room
|
roomCenterPillar :: RandomGen g => State g Room
|
||||||
roomCenterPillar = changeLinkTo ((\p -> dist p (V2 120 0) < 10) . fst)
|
roomCenterPillar = changeLinkTo ((\p -> dist p (V2 120 0) < 10) . fst)
|
||||||
@@ -272,7 +264,7 @@ weaponEmptyRoom = do
|
|||||||
,mntLightLnkCond unusedLnkToPS
|
,mntLightLnkCond unusedLnkToPS
|
||||||
]
|
]
|
||||||
treeFromTrunk [PassDown corridor]
|
treeFromTrunk [PassDown corridor]
|
||||||
<$> ((fmap connectRoom . randomiseOutLinks) =<<
|
<$> ((fmap singleUseAll . randomiseOutLinks) =<<
|
||||||
changeLinkTo ((\p -> dist p (V2 (w/2) 0) < 10) . fst) (set rmPmnts plmnts $ roomRect w h 2 2)
|
changeLinkTo ((\p -> dist p (V2 (w/2) 0) < 10) . fst) (set rmPmnts plmnts $ roomRect w h 2 2)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -285,14 +277,14 @@ weaponUnderCrits = do
|
|||||||
]
|
]
|
||||||
let continuationRoom = treeFromTrunk
|
let continuationRoom = treeFromTrunk
|
||||||
[PassDown corridorN,PassDown corridorN]
|
[PassDown corridorN,PassDown corridorN]
|
||||||
(connectRoom (set rmPmnts plmnts corridorN))
|
(singleUseAll (set rmPmnts plmnts corridorN))
|
||||||
rcp <- roomCenterPillar
|
rcp <- roomCenterPillar
|
||||||
deadEndRoom' <- takeOne [roomPillars,rcp]
|
deadEndRoom' <- takeOne [roomPillars,rcp]
|
||||||
junctionRoom <- takeOne [PassDown tEast,PassDown tWest]
|
junctionRoom <- takeOne [PassDown tEast,PassDown tWest]
|
||||||
return $ treeFromTrunk [PassDown corridorN,PassDown corridorN]
|
return $ treeFromTrunk [PassDown corridorN,PassDown corridorN]
|
||||||
$ Node junctionRoom
|
$ Node junctionRoom
|
||||||
[continuationRoom
|
[continuationRoom
|
||||||
,deadRoom deadEndRoom'
|
,singleUseNone deadEndRoom'
|
||||||
]
|
]
|
||||||
|
|
||||||
weaponBehindPillar :: RandomGen g => State g (SubCompTree Room)
|
weaponBehindPillar :: RandomGen g => State g (SubCompTree Room)
|
||||||
@@ -310,7 +302,7 @@ weaponBehindPillar = do
|
|||||||
[PassDown corridor
|
[PassDown corridor
|
||||||
,PassDown $ over rmLinks tail $ over rmPmnts (++ plmnts1) rcp
|
,PassDown $ over rmLinks tail $ over rmPmnts (++ plmnts1) rcp
|
||||||
]
|
]
|
||||||
(connectRoom $ set rmPmnts [sPS (V2 20 60) (negate $ pi/2) randC1] corridorN)
|
(singleUseAll $ set rmPmnts [sPS (V2 20 60) (negate $ pi/2) randC1] corridorN)
|
||||||
|
|
||||||
weaponBetweenPillars :: RandomGen g => State g (SubCompTree Room)
|
weaponBetweenPillars :: RandomGen g => State g (SubCompTree Room)
|
||||||
weaponBetweenPillars = do
|
weaponBetweenPillars = do
|
||||||
@@ -324,7 +316,7 @@ weaponBetweenPillars = do
|
|||||||
,sPS crPos2 (d crPos2) randC1
|
,sPS crPos2 (d crPos2) randC1
|
||||||
]
|
]
|
||||||
theRoom = roomPillars & rmPmnts %~ (++ plmnts)
|
theRoom = roomPillars & rmPmnts %~ (++ plmnts)
|
||||||
(fmap connectRoom . randomiseOutLinks) =<< filterLinks f theRoom
|
(fmap singleUseAll . randomiseOutLinks) =<< filterLinks f theRoom
|
||||||
where
|
where
|
||||||
f (_,a) = a == 0
|
f (_,a) = a == 0
|
||||||
|
|
||||||
@@ -336,8 +328,8 @@ weaponLongCorridor = do
|
|||||||
]
|
]
|
||||||
i1 <- state $ randomR (2,5)
|
i1 <- state $ randomR (2,5)
|
||||||
i2 <- state $ randomR (2,5)
|
i2 <- state $ randomR (2,5)
|
||||||
let branch1 = treeFromTrunk (replicate i1 $ PassDown corridorN) (connectRoom $ putCrs connectingRoom)
|
let branch1 = treeFromTrunk (replicate i1 $ PassDown corridorN) (singleUseAll $ putCrs connectingRoom)
|
||||||
let branch2 = treeFromTrunk (replicate i2 $ PassDown corridorN) (deadRoom $ putWp corridor)
|
let branch2 = treeFromTrunk (replicate i2 $ PassDown corridorN) (singleUseNone $ putWp corridor)
|
||||||
return $ Node (PassDown root) [branch1,branch2]
|
return $ Node (PassDown root) [branch1,branch2]
|
||||||
where
|
where
|
||||||
putCrs = over rmPmnts (++ [sPS (V2 10 40) (-pi/2) randC1 ,sPS (V2 (-10) 40) (-pi/2) randC1 ])
|
putCrs = over rmPmnts (++ [sPS (V2 10 40) (-pi/2) randC1 ,sPS (V2 (-10) 40) (-pi/2) randC1 ])
|
||||||
@@ -512,4 +504,4 @@ spawnerRoom = do
|
|||||||
roomWithSpawner <- roomC x y <&>
|
roomWithSpawner <- roomC x y <&>
|
||||||
rmPmnts %~ (spNoID (PSRoomRand 0) (PutCrit spawnerCrit) :)
|
rmPmnts %~ (spNoID (PSRoomRand 0) (PutCrit spawnerCrit) :)
|
||||||
aRoom <- airlock
|
aRoom <- airlock
|
||||||
return $ treeFromTrunk [PassDown aRoom,PassDown corridor] $ connectRoom roomWithSpawner
|
return $ treeFromTrunk [PassDown aRoom,PassDown corridor] $ singleUseAll roomWithSpawner
|
||||||
|
|||||||
@@ -80,11 +80,12 @@ rezThenLasTurret = do
|
|||||||
cenroom <- randomiseOutLinks $ centralLasTurret {_rmLabel = Just 0}
|
cenroom <- randomiseOutLinks $ centralLasTurret {_rmLabel = Just 0}
|
||||||
let doorroom = switchDoorRoom {_rmTakeFrom = Just 0}
|
let doorroom = switchDoorRoom {_rmTakeFrom = Just 0}
|
||||||
contTree = treeFromPost [PassDown cenroom,PassDown doorroom] (UseAll door)
|
contTree = treeFromPost [PassDown cenroom,PassDown doorroom] (UseAll door)
|
||||||
return $ rbox `appendEitherTree` [contTree]
|
return $ rbox `passUntilUseAll` [contTree]
|
||||||
|
|
||||||
startRoom :: RandomGen g => Int -> State g (SubCompTree Room)
|
startRoom :: RandomGen g => Int -> State g (SubCompTree Room)
|
||||||
startRoom i = join $ takeOne
|
startRoom i = join $ takeOne
|
||||||
[ minigunfakeout
|
[-- roomMiniIntro
|
||||||
|
minigunfakeout
|
||||||
, rezBoxesWp
|
, rezBoxesWp
|
||||||
, rezBoxesThenWeaponRoom
|
, rezBoxesThenWeaponRoom
|
||||||
, rezBoxThenWeaponRoom
|
, rezBoxThenWeaponRoom
|
||||||
@@ -96,7 +97,7 @@ runPastStart :: RandomGen g => Int -> State g (SubCompTree Room)
|
|||||||
runPastStart i = do
|
runPastStart i = do
|
||||||
s <- rezBoxStart
|
s <- rezBoxStart
|
||||||
rp <- runPastRoom i
|
rp <- runPastRoom i
|
||||||
return $ s `appendEitherTree` [rp]
|
return $ s `passUntilUseAll` [rp]
|
||||||
|
|
||||||
rezBoxStart :: RandomGen g => State g (SubCompTree Room)
|
rezBoxStart :: RandomGen g => State g (SubCompTree Room)
|
||||||
rezBoxStart = do
|
rezBoxStart = do
|
||||||
@@ -135,7 +136,7 @@ rezBoxesThenWeaponRoom :: RandomGen g => State g (SubCompTree Room)
|
|||||||
rezBoxesThenWeaponRoom = do
|
rezBoxesThenWeaponRoom = do
|
||||||
rboxes <- rezBoxes
|
rboxes <- rezBoxes
|
||||||
wroom <- weaponRoom
|
wroom <- weaponRoom
|
||||||
return $ rboxes `appendEitherTree` [wroom]
|
return $ rboxes `passUntilUseAll` [wroom]
|
||||||
|
|
||||||
rezBoxThenWeaponRoom :: RandomGen g => State g (SubCompTree Room)
|
rezBoxThenWeaponRoom :: RandomGen g => State g (SubCompTree Room)
|
||||||
rezBoxThenWeaponRoom = do
|
rezBoxThenWeaponRoom = do
|
||||||
|
|||||||
@@ -1,17 +1,12 @@
|
|||||||
{-| Combining and composing trees of trees. -}
|
{-| Combining and composing trees of trees. -}
|
||||||
module Dodge.Tree.Compose
|
module Dodge.Tree.Compose
|
||||||
( expandTreeBy
|
( expandTree
|
||||||
, appendEitherTree
|
|
||||||
, connectRoom
|
|
||||||
, connectTrunk
|
|
||||||
, deadRoom
|
|
||||||
, linkEitherTrees
|
|
||||||
, expandTree
|
|
||||||
, singleUseAll
|
, singleUseAll
|
||||||
, singleUseNone
|
, singleUseNone
|
||||||
, passUntilUseAll
|
, passUntilUseAll
|
||||||
, chainUses
|
, chainUses
|
||||||
, useAllAtEnd
|
, useAllAtEnd
|
||||||
|
, changeToPassDown
|
||||||
) where
|
) where
|
||||||
import Dodge.Tree.Compose.Data
|
import Dodge.Tree.Compose.Data
|
||||||
import Data.Tree
|
import Data.Tree
|
||||||
@@ -25,95 +20,25 @@ expandTree (Node root extChildren) = case root of
|
|||||||
Node (SplitDown x) xs -> Node x $ map expandTree $ zipWith Node xs
|
Node (SplitDown x) xs -> Node x $ map expandTree $ zipWith Node xs
|
||||||
$ map (:[]) extChildren ++ repeat []
|
$ map (:[]) extChildren ++ repeat []
|
||||||
|
|
||||||
expandTreeBy
|
|
||||||
:: (a -> SubCompTree b) -- ^ Node function
|
|
||||||
-> Tree a -- ^ Base tree
|
|
||||||
-> Tree b
|
|
||||||
expandTreeBy f (Node x []) = fmap _unCompose (f x)
|
|
||||||
expandTreeBy f (Node x xs) = appendAndRemove $ f x
|
|
||||||
where
|
|
||||||
appendAndRemove (Node (PassDown y) ys) = Node y (map appendAndRemove ys)
|
|
||||||
appendAndRemove (Node (UseAll y) _ ) = Node y (map (expandTreeBy f) xs)
|
|
||||||
|
|
||||||
|
|
||||||
---- | 'Left' elements get new children as given by the node function,
|
|
||||||
---- 'Right' elements inherit the children from the base tree
|
|
||||||
--expandTreeBy
|
|
||||||
-- :: (a -> Tree (Either b b)) -- ^ Node function
|
|
||||||
-- -> Tree a -- ^ Base tree
|
|
||||||
-- -> Tree b
|
|
||||||
--expandTreeBy f (Node x []) = fmap removeEither (f x)
|
|
||||||
--expandTreeBy f (Node x xs) = appendAndRemove $ f x
|
|
||||||
-- where
|
|
||||||
-- appendAndRemove (Node (Left y) ys) = Node y (map appendAndRemove ys)
|
|
||||||
-- appendAndRemove (Node (Right y) _ ) = Node y (map (expandTreeBy f) xs)
|
|
||||||
|
|
||||||
-- | Appends a second either forest at the 'Right' elements of a first either
|
|
||||||
-- tree.
|
|
||||||
-- Makes such 'Right' elements into 'Left's.
|
|
||||||
--appendEitherTree
|
|
||||||
-- :: Tree (Either a a) -- ^ The first tree
|
|
||||||
-- -> [Tree (Either a a)] -- ^ The forest to append
|
|
||||||
-- -> Tree (Either a a)
|
|
||||||
--appendEitherTree (Node (Left x) ts) ts' = Node (Left x) $ map (`appendEitherTree` ts') ts
|
|
||||||
--appendEitherTree (Node (Right x) _) ts' = Node (Left x) ts'
|
|
||||||
|
|
||||||
appendEitherTree = passUntilUseAll
|
|
||||||
|
|
||||||
passUntilUseAll :: SubCompTree a -> [SubCompTree a] -> SubCompTree a
|
passUntilUseAll :: SubCompTree a -> [SubCompTree a] -> SubCompTree a
|
||||||
passUntilUseAll (Node (UseAll x) _) ts' = Node (PassDown x) ts'
|
passUntilUseAll (Node (UseAll x) _) ts' = Node (PassDown x) ts'
|
||||||
passUntilUseAll (Node cn ts) ts' = Node (PassDown (_unCompose cn)) $ map (`passUntilUseAll` ts') ts
|
passUntilUseAll (Node cn ts) ts' = Node (PassDown (_unCompose cn)) $ map (`passUntilUseAll` ts') ts
|
||||||
|
|
||||||
--linkEitherTrees :: [Tree (Either a a)] -> Tree (Either a a)
|
|
||||||
--linkEitherTrees (t:s:ts) = linkEitherTrees (appendEitherTree t [s]:ts)
|
|
||||||
--linkEitherTrees [t] = t
|
|
||||||
--linkEitherTrees [] = error "tried to concatenate an empty list of either trees"
|
|
||||||
|
|
||||||
linkEitherTrees = chainUses
|
|
||||||
|
|
||||||
chainUses :: [SubCompTree a] -> SubCompTree a
|
chainUses :: [SubCompTree a] -> SubCompTree a
|
||||||
chainUses (t:s:ts) = chainUses (passUntilUseAll t [s]:ts)
|
chainUses (t:s:ts) = chainUses (passUntilUseAll t [s]:ts)
|
||||||
chainUses [t] = t
|
chainUses [t] = t
|
||||||
chainUses [] = error "tried to concatenate an empty list of SubCompTrees"
|
chainUses [] = error "tried to concatenate an empty list of SubCompTrees"
|
||||||
|
|
||||||
removeEither = _unCompose
|
|
||||||
|
|
||||||
-- this is _unCompose
|
|
||||||
--removeEither :: Either p p -> p
|
|
||||||
--removeEither (Left y) = y
|
|
||||||
--removeEither (Right y) = y
|
|
||||||
|
|
||||||
{- |
|
|
||||||
Make a singleton connection of an Either Tree.
|
|
||||||
-}
|
|
||||||
--connectRoom :: a -> Tree (Either a a)
|
|
||||||
--connectRoom r = Node (Right r) []
|
|
||||||
|
|
||||||
connectRoom = singleUseAll
|
|
||||||
|
|
||||||
singleUseAll :: a -> Tree (ComposingNode a)
|
singleUseAll :: a -> Tree (ComposingNode a)
|
||||||
singleUseAll x = Node (UseAll x) []
|
singleUseAll x = Node (UseAll x) []
|
||||||
|
|
||||||
{- |
|
|
||||||
Make a single Either connection at the end of a tree.
|
|
||||||
-}
|
|
||||||
--connectTrunk :: Tree a -> Tree (Either a a)
|
|
||||||
--connectTrunk (Node x (t:ts)) = Node (Left x) (connectTrunk t : map (fmap Left) ts)
|
|
||||||
--connectTrunk (Node x []) = Node (Right x) []
|
|
||||||
--
|
|
||||||
connectTrunk = useAllAtEnd
|
|
||||||
useAllAtEnd :: Tree a -> SubCompTree a
|
useAllAtEnd :: Tree a -> SubCompTree a
|
||||||
useAllAtEnd tree = case tree of
|
useAllAtEnd tree = case tree of
|
||||||
Node x (t:ts) -> Node (PassDown x) (useAllAtEnd t : map (fmap UseNone) ts)
|
Node x (t:ts) -> Node (PassDown x) (useAllAtEnd t : map (fmap UseNone) ts)
|
||||||
Node x [] -> Node (UseAll x) []
|
Node x [] -> Node (UseAll x) []
|
||||||
|
|
||||||
{- |
|
|
||||||
Make a singleton dead end of an Either Tree.
|
|
||||||
-}
|
|
||||||
--deadRoom :: a -> Tree (Either a a)
|
|
||||||
--deadRoom r = Node (Left r) []
|
|
||||||
|
|
||||||
deadRoom = singleUseNone
|
|
||||||
|
|
||||||
singleUseNone :: a -> SubCompTree a
|
singleUseNone :: a -> SubCompTree a
|
||||||
singleUseNone x = Node (UseNone x) []
|
singleUseNone x = Node (UseNone x) []
|
||||||
|
|
||||||
|
changeToPassDown :: ComposingNode a -> ComposingNode a
|
||||||
|
changeToPassDown x = PassDown (_unCompose x)
|
||||||
|
|||||||
Reference in New Issue
Block a user