Я не смог придумать, как закодировать Obj
в Scala:
{-# LANGUAGE ExistentialQuantification #-}
data Obj = forall a. (Show a) => Obj a
instance Show Obj where show (Obj a) = "Obj " ++ show a
main = print $ show [Obj "hello", Obj 3, Obj True]
при запуске выше выдает следующий вывод:
[Obj "hello",Obj 3,Obj True]
В Scala, однако, это не похоже на компиляцию:
forSome { type T; implicit val ev: Show[T] }
и не делает этого:
forSome { type T : Show[T] }
Возможно ли это на уровне системного уровня или мне нужно "захватить" экземпляр класса типа, используя что-то вроде этого:
class Obj[T](val x: T)(implicit val: Show[T]) // ...or similar
Любое понимание будет оценено!