Вот конкретный случай общего вопроса я действительно прошу: Предположу, что я нахожусь в исполнении критической секции коды, и я получил значение,Haskell/GHC: Непонятно деконструкция конструктора?
x :: Maybe Int
Я знаю, что это Just Int
и не Nothing
, но из-за кода из моего контроля, я не могу организовать получение фактического Int
напрямую. Я хочу сделать
case x of
Just i -> whatever i
, но я не хочу, чтобы GHC вставлял любые проверки или обработку ошибок или прыжки или что-то еще; просто интерпретируйте биты так, как будто они имеют форму Just i
и позвольте мне разобраться с последствиями.
Возможно ли это? (Да, я знаю, это то, что не следует делать регулярно.)
Возможно, сыграть некоторые уродливые трюки с 'unsafeCoerce' и при большом предположении о том, как GHC точно реализует свое время выполнения, вы можете достичь этого. Но...Я действительно сомневаюсь, что эта проверка - большая проблема: есть ли у вас какие-либо доказательства? Как говорит Кнут, преждевременная оптимизация - это корень всего зла. И не используйте «небезопасные» вещи, если вы действительно не можете обойтись без них. – chi
Нет, у меня нет никаких доказательств, и я сделаю некоторый бенчмаркинг, прежде чем что-либо реализовать. –
Вы посмотрели на скомпилированное ядро, которое генерирует ваша программа? В зависимости от того, почему «возможно» участвует в первую очередь, возможно *, что GHC, возможно, уже удалил его для вас ... – MathematicalOrchid