Size: a a a

2021 April 02

[

[BRM]White Rabbit in Haskell
Kir
()
точно
источник

K

Kir in Haskell
forall a. a -> [Int] же
источник

[

[BRM]White Rabbit in Haskell
Но вариант-то рабочий чи нет?
источник

K

Kir in Haskell
[BRM]White Rabbit
Но вариант-то рабочий чи нет?
Вариант чего?
источник

[

[BRM]White Rabbit in Haskell
Kirill Valyavin
Возможно, дурацкий вопрос, но можно ли как-нибудь положить thunk в переменную и периодически копировать и вычислять копии, чтобы оригинал оставался невычисленным?
.
источник

IO

I O in Haskell
Нет, он ничем не отличается от просто функции кроме одного каста:

f_x :: [Int]
f_x = eftInt 1# 1000#

f1 :: forall a. a -> [Int]
f1 = \ (@ a_aQu) _ -> f_x

f :: forall a. LazyFunc a [Int]
f = f1 `cast` <Co:8>
источник

[

[BRM]White Rabbit in Haskell
🤔
источник

K

Kir in Haskell
Kirill Valyavin
Возможно, дурацкий вопрос, но можно ли как-нибудь положить thunk в переменную и периодически копировать и вычислять копии, чтобы оригинал оставался невычисленным?
Если oneShot и NO_INLINE не помогли с
foo = (oneShot \() -> bar ()) ()

bar () = resource


то никак
источник

K

Kir in Haskell
или bar = oneShot \() -> resource
источник

[

[BRM]White Rabbit in Haskell
хаскель слишком умный для нас, переходим на си
источник

K

Kir in Haskell
[BRM]White Rabbit
хаскель слишком умный для нас, переходим на си
Не, это просто специальная магия. oneShot отключает некоторые оптимизации
источник

K

Kir in Haskell
Для general use оно не нужно
источник

KV

Kirill Valyavin in Haskell
Kir
Если oneShot и NO_INLINE не помогли с
foo = (oneShot \() -> bar ()) ()

bar () = resource


то никак
Ну походу с оптимизациями не помогает ничего (
источник

KV

Kirill Valyavin in Haskell
Kir
Для general use оно не нужно
Не текущие кондуиты не general use, значит (
источник

K

Kir in Haskell
Kirill Valyavin
Ну походу с оптимизациями не помогает ничего (
Пытаетесь unsafePerformIO $ newTVarIO ... завернуть?

Пользователям кондуитов этого делать не надо же
источник

KV

Kirill Valyavin in Haskell
Kir
Пытаетесь unsafePerformIO $ newTVarIO ... завернуть?

Пользователям кондуитов этого делать не надо же
Пользователям кондуитов нужны кондуиты, которые не сидят в памяти из-за шаринга как сычи, а пересчитываются
источник

K

Kir in Haskell
Kirill Valyavin
Пользователям кондуитов нужны кондуиты, которые не сидят в памяти из-за шаринга как сычи, а пересчитываются
{-# noinline bar #-} пробовали?
источник

KV

Kirill Valyavin in Haskell
Пробовал, пробовал
источник

AA

A64m AL256m qn<co... in Haskell
Kir
Не, это просто специальная магия. oneShot отключает некоторые оптимизации
по-моему, уанШот наоборот разрешает некоторые оптимизации, это не указание гхц делать так чтоб что-то было уаншот, это разрешение ему делать что-то в случае, когда что-то уанШот но гхц слишком тупой шоб понять это
источник

IO

I O in Haskell
Кстати, state-hack это poor man's oneShot:

foo :: State# RealWorld -> [Int]
foo _ = [1..1000]



foo :: State# RealWorld -> [Int]
foo = \ _ -> eftInt 1# 1000#
источник