migrate to typelevel discipline