Аргумент функции, который трансформируется в монаде -- haskell поле с участием st-monad пол Связанный проблема

Function argument which transforms in ST Monad


0
vote

проблема

русский

Как я могу написать следующую функцию <код> tt , который имеет в данный момент ошибки:

 <код> t :: Int t = runST $ do   ref <- newSTRef 10   readSTRef ref  tt :: (STRef s a -> ST s a) -> Int tt f = runST $ do   ref <- newSTRef 10   f ref  ttTest = tt readSTRef   

Я думал, что внутри <код> runST в <код> tt , переменная состояния <код> s может быть введена в функцию <код> f , но Следующая ошибка компилятора говорит мне, что я ошибаюсь:

 <код> transform.hs:50:3: Couldn't match type `s' with `s1' …   `s' is a rigid type variable bound by       the type signature for tt :: (STRef s a -> ST s a) -> Int       at transform.hs:47:7   `s1' is a rigid type variable bound by        a type expected by the context: ST s1 Int        at transform.hs:48:8 Expected type: ST s1 Int   Actual type: ST s a Relevant bindings include   ref :: STRef s1 a     (bound at transform.hs:49:3)   f :: STRef s a -> ST s a     (bound at transform.hs:48:4)   tt :: (STRef s a -> ST s a) -> Int     (bound at transform.hs:48:1) In a stmt of a 'do' block: f ref In the second argument of `($)', namely   `do { ref <- newSTRef 10;         f ref }' transform.hs:50:3: Couldn't match type `a' with `Int' …   `a' is a rigid type variable bound by       the type signature for tt :: (STRef s a -> ST s a) -> Int       at transform.hs:47:7 Expected type: ST s1 Int   Actual type: ST s a Relevant bindings include   ref :: STRef s1 a     (bound at transform.hs:49:3)   f :: STRef s a -> ST s a     (bound at transform.hs:48:4)   tt :: (STRef s a -> ST s a) -> Int     (bound at transform.hs:48:1) In a stmt of a 'do' block: f ref In the second argument of `($)', namely   `do { ref <- newSTRef 10;         f ref }'   

Любые комментарии будут оценены глубоко.

Английский оригинал

How can I write the following function tt, which has currently type error:

t :: Int t = runST $ do   ref <- newSTRef 10   readSTRef ref  tt :: (STRef s a -> ST s a) -> Int tt f = runST $ do   ref <- newSTRef 10   f ref  ttTest = tt readSTRef 

I thought that inside runST in tt, state variable s can be threaded into function f, but following compiler error tells me that i'm wrong:

transform.hs:50:3: Couldn't match type `s' with `s1' …   `s' is a rigid type variable bound by       the type signature for tt :: (STRef s a -> ST s a) -> Int       at transform.hs:47:7   `s1' is a rigid type variable bound by        a type expected by the context: ST s1 Int        at transform.hs:48:8 Expected type: ST s1 Int   Actual type: ST s a Relevant bindings include   ref :: STRef s1 a     (bound at transform.hs:49:3)   f :: STRef s a -> ST s a     (bound at transform.hs:48:4)   tt :: (STRef s a -> ST s a) -> Int     (bound at transform.hs:48:1) In a stmt of a 'do' block: f ref In the second argument of `($)', namely   `do { ref <- newSTRef 10;         f ref }' transform.hs:50:3: Couldn't match type `a' with `Int' …   `a' is a rigid type variable bound by       the type signature for tt :: (STRef s a -> ST s a) -> Int       at transform.hs:47:7 Expected type: ST s1 Int   Actual type: ST s a Relevant bindings include   ref :: STRef s1 a     (bound at transform.hs:49:3)   f :: STRef s a -> ST s a     (bound at transform.hs:48:4)   tt :: (STRef s a -> ST s a) -> Int     (bound at transform.hs:48:1) In a stmt of a 'do' block: f ref In the second argument of `($)', namely   `do { ref <- newSTRef 10;         f ref }' 

Any comments will be appreciated deeply.

</div
     
 
 

Список ответов

1
 
vote
vote
Лучший ответ
 

Ответ был опубликован псевдоанонимно:

<Код> tt :: (forall s . STRef s Int -> ST s Int) -> Int .

 

The answer was posted pseudo-anonymously:

tt :: (forall s . STRef s Int -> ST s Int) -> Int.

</div
 
 

Связанный проблема

19  Что использует вы нашли для типов более высокого ранга в Haskell?  ( What uses have you found for higher rank types in haskell ) 
Высшие типы рангов выглядят как очень весело. Из На этот пример приходит Haskell Wikibook : <код> foo :: (forall a. a -> a) -> (Char,Bool) foo f = (f 'c', ...

2  Regex захвата названных групп на языке, который не поддерживает их с помощью мета регулярных выражений?  ( Regex capturing named groups in a language that doesnt support them using a met ) 
<Р> Я использую Haskell, и я, кажется, не найти пакет Regex, который поддерживает именованные группы, поэтому я должен реализовать это как-то сам. в основном п...

14  Складная над полиморфным списком в Haskell  ( Folding over a polymorphic list in haskell ) 
У меня есть коллекция записей, распространенных по ряду типов в большом приложении Haskell, которое ссылается друг на друга. Все типы участвуют в реализации о...

4  Haskell Aeson Разрушение общих разбросов  ( Haskell aeson destructuring generic parse ) 
У меня есть запрос JSON в стиле <код> {"command":"get","params":{"something":"something else"}} и этот код фрагмента из yesod book <код> {-# LANGUAG...

2  Обобщение функции объединить набор производителей труб Haskell  ( Generalizing a function to merge a set of haskell pipes producers ) 
Я работаю с Пакет Haskell Трубы . Я пытаюсь использовать Трубы-параллелизм для объединения списка производителей вместе. Что я хочу прибыть на: <код>...

1  Как написать генератор Haskell QuickCheck для Data.meldableheap Очередь приоритета  ( How to write a haskell quickcheck generator for a data meldableheap priority que ) 
Как учебное упражнение, которое я хочу написать генератор <код> Data.MeldableHeap . Я счеркнул его после: https://gitorious.org/aocapq/aoCapq/ Source / 7F2...

15  Как вы используете типопливники в Haskell?  ( How do you use typeapplications in haskell ) 
с -XTypeApplications в GHC 8.0, вы явно указываете типы с <код> @ предшествующих аргументах функций. Какие типы это точно уточняют, особенно когда введен н...

4  Простое объяснение операторов <$> и <*>  ( Simple explanation of and operators ) 
Я должен дать (простой) говорить о yesod. И да, .. Я никогда не или действительно редко использовал Haskell. Университет преподавателя ..... а. Так что я пр...

8  Emacs: переопределение команды в Haskell-Mode (Haskell-Mode-Took)  ( Emacs redefining command in haskell mode haskell mode hook ) 
В Emacs в Haskell-режиме я хотел изменить команду . "C-X C-S" к . «C-X C-S», а затем «C-C C-L». Принимая кий от: haskell.org: emacs / keybindings и...

3  Haskell - заставить строгую оценку со странным, рекурсивный тип  ( Haskell forcing strict evaluation with a weird recursive type ) 
i Ранее задали вопрос о том, как заставить строгая оценка для создания тайм-аута. Используя <код> seq / <код> $! достаточно большую часть времени, а <код>...

35  Функция Haskell Состав  ( Haskell function composition ) 
Я читаю Это Учебник на Haskell. Они определяют функцию функции как следующее: <код> (.) :: (b->c) -> (a->b) -> (a->c) f . g ...

2  Выпуск производительности на цепочке Коллац  ( Performance issue on collatz chain ) 
У меня есть рабочая программа для вычисления самой длинной цепочки Collatz в данном диапазоне (проект EULER N ° 14). Я думаю, что это работает правильно, но о...

4  Утечка памяти при использовании Control.concurrent.Stm.tbqueue  ( Memory leak when using control concurrent stm tbqueue ) 
У меня есть два потока: производитель и потребитель. Производитель производит некоторые (ключ, стоимость) пары и потребитель вставляют их в <код> Map , заверн...

20  Как поднимается (в функциональном контексте программирования) относится к теории категории?  ( How does lifting in a functional programming context relate to category theory ) 
Смотреть на haskell Документация, подъем, кажется, в основном обобщение <код> filter%5Blogic%5D=and&filter%5Bfilters%5D%5B0%5D%5Bvalue%5D=CAR&filter%5Bfilte...

1  Aeson: анализ вложенного объекта AS (карта String MyshinyType)  ( Aeson parse nested object as map string myshinytype ) 
У меня есть файл JSON-схемы с помощью поля «Свойства». <код> { ... "properties": { "id": { "description": "ID", "type": "int...

Связанный проблема

19  Что использует вы нашли для типов более высокого ранга в Haskell? 
2  Regex захвата названных групп на языке, который не поддерживает их с помощью мета регулярных выражений? 
14  Складная над полиморфным списком в Haskell 
4  Haskell Aeson Разрушение общих разбросов 
2  Обобщение функции объединить набор производителей труб Haskell 
1  Как написать генератор Haskell QuickCheck для Data.meldableheap Очередь приоритета 
15  Как вы используете типопливники в Haskell? 
4  Простое объяснение операторов <$> и <*> 
8  Emacs: переопределение команды в Haskell-Mode (Haskell-Mode-Took) 
3  Haskell - заставить строгую оценку со странным, рекурсивный тип 
35  Функция Haskell Состав 
2  Выпуск производительности на цепочке Коллац 
4  Утечка памяти при использовании Control.concurrent.Stm.tbqueue 
20  Как поднимается (в функциональном контексте программирования) относится к теории категории? 
1  Aeson: анализ вложенного объекта AS (карта String MyshinyType) 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.