FILE: recursiveCallOnWhenWithSealedClass.kt
    public sealed class Maybe<T> : R|kotlin/Any| {
        protected constructor<T>(): R|Maybe<T>| {
            super<R|kotlin/Any|>()
        }

        public final class Nope<T> : R|Maybe<T>| {
            public constructor<T>(reasonForLog: R|kotlin/String|, reasonForUI: R|kotlin/String|): R|Maybe.Nope<T>| {
                super<R|Maybe<T>|>()
            }

            public final val reasonForLog: R|kotlin/String| = R|<local>/reasonForLog|
                public get(): R|kotlin/String|

            public final val reasonForUI: R|kotlin/String| = R|<local>/reasonForUI|
                public get(): R|kotlin/String|

        }

        public final class Yeah<T> : R|Maybe<T>| {
            public constructor<T>(meat: R|T|): R|Maybe.Yeah<T>| {
                super<R|Maybe<T>|>()
            }

            public final val meat: R|T| = R|<local>/meat|
                public get(): R|T|

        }

        public final fun unwrap(): R|T| {
            ^unwrap when (lval <when-subject>: R|Maybe<T>| = this@R|/Maybe|) {
                ($subj$ is R|Maybe.Nope<T>|) ->  {
                    throw R|java/lang/Exception.Exception|(String())
                }
                ($subj$ is R|Maybe.Yeah<T>|) ->  {
                    this@R|/Maybe|.R|SubstitutionOverride</Maybe.Yeah.meat: R|T|>|
                }
            }

        }

    }
