module LinearScan.Ssrfun where


import Debug.Trace (trace, traceShow)
import qualified Prelude
import qualified Data.IntMap
import qualified Data.IntSet
import qualified Data.List
import qualified Data.Ord
import qualified Data.Functor.Identity
import qualified LinearScan.Utils

import qualified LinearScan.Specif as Specif


_Option__apply :: (a1 -> a2) -> a2 -> (Prelude.Maybe a1) -> a2
_Option__apply f x u =
  case u of {
   Prelude.Just y -> f y;
   Prelude.Nothing -> x}

_Option__coq_default :: a1 -> (Prelude.Maybe a1) -> a1
_Option__coq_default =
  _Option__apply (\x -> x)

_Option__bind :: (a1 -> Prelude.Maybe a2) -> (Prelude.Maybe a1) ->
                 Prelude.Maybe a2
_Option__bind f =
  _Option__apply f Prelude.Nothing

pcomp :: (a2 -> Prelude.Maybe a1) -> (a3 -> Prelude.Maybe a2) -> a3 ->
         Prelude.Maybe a1
pcomp f g x =
  _Option__bind f (g x)

s2val :: (Specif.Coq_sig2 a1) -> a1
s2val u =
  u

sig_of_sig2 :: (Specif.Coq_sig2 a1) -> a1
sig_of_sig2 u =
  s2val u