Все вопросы: [monads]

33 вопросов

4
голосов
4ответов
400 просмотров

Issue with Haskell's "do"

I wrote a Haskell function that calculates the factorial of every number in a given list and prints it to the screen. factPrint list = if null list then putStrLn "" else do putStrLn ((show.fact.head) list) factPrint (tail list) The function works, but I find the third line a bi...

7
голосов
3ответов
475 просмотров

looking for learning exercise: implement these monads

When learning about new programming subjects I usually follow a pattern: I read about it, I understand it, and then I code up a few examples to make sure I really get it. I've read a lot about monads, and I'm confident that I understand and get them. I'm now at a stage where I'd really like to...

1
голосов
3ответов
286 просмотров

Something like mapM, but for arrays? (like arrayMap, but mapping an impure function)

I see that I can map a function over mutable arrays with mapArray, but there doesn't seem to be something like mapM (and mapM_). mapArray won't let me print its elements, for example: import Data.Array.Storable arr <- newArray (1,10) 42 :: IO -- answer to Life, Universe and Everything x &lt...

2
голосов
2ответов
1476 просмотров

In C# adding SelectMany extends linq to a new monad type, how do I do the same thing in VB.net?

An old Yet Another Language Geek blog post explaining monads describes adding a SelectMany extension method to C# in order to extend the linq syntax to new types. I've tried it in C# and it works. I did a straight conversion to VB.net and it doesn't work. Does anyone know if VB.net supports this...

9
голосов
3ответов
1240 просмотров

Is it better to use the State monad, or to pass state recursively?

I'm just learning Haskell, and trying to figure out the most idiomatic way to implement a line of sight algorithm. The demo code I found uses the state monad, but it seem simpler to me (I'm just a beginner) to pass state recursively. What am I missing here? Are there performance problems? Fin...

1
голосов
3ответов
322 просмотров

Methods for side-effects in purely functional programming languages

At the moment I'm aware of the following methods to integrate side-effects into purely functional programming languages: effect systems continuations unique types monads Monads are often cited to be the most effective and most general way to do this. Which other methods exist? How do they co...

3
голосов
2ответов
869 просмотров

Simplifying some Haskell code

So I'm working on a minimax implementation for a checkers-like game to help myself learn Haskell better. The function I'm having trouble with takes a list for game states, and generates the list of immediate successor game states. Like checkers, if a jump is available, the player must take it. ...

35
голосов
8ответов
11134 просмотров

Evil use of Maybe monad and extension methods in C#?

edit 2015 This question and its answers are no longer relevant. It was asked before the advent of C# 6, which has the null propagating opertor (?.), which obviates the hacky-workarounds discussed in this question and subsequent answers. As of 2015, in C# you should now use Form.ActiveForm?.Active...

5
голосов
2ответов
784 просмотров

Values inside monads, nested in data structures?

Suppose that in a Haskell program I have some data whose type is something like: IO [ IO (Int, String, Int) ], or IO [ (Int, String, IO Int) ], or [ (Int, String, IO Int) ] but I have pure functions that should operate on [ (Int, String, Int) ]. It seems that I'd have to clumsily remove the ...

10
голосов
3ответов
2922 просмотров

Haskell: Can I use a where clause after a block with bind operators (>>=)?

I have a very simple question. I'd like to use a where clause after a bloc of code that uses bind operators but I get a compilation error. Here is a simple example: main = putStrLn "where clause test:" >> return [1..10] >>= \list -> print list' where list' = r...

12
голосов
5ответов
2998 просмотров

Haskell: monadic takeWhile?

I have some functions written in C that I call from Haskell. These functions return IO (CInt). Sometimes I want to run all of the functions regardless of what any of them return, and this is easy. For sake of example code, this is the general idea of what's happening currently: Prelude> le...

18
голосов
3ответов
5714 просмотров

How do I combine monads in Haskell?

Particularly, I need to be able to combine the CGI monad with the IO monad, but an example of how to combine the IO monad with the Maybe monad might be even better...

4
голосов
3ответов
906 просмотров

Как я могу инициализировать состояние скрытым способом в Haskell (как это делает ГПСЧ)?

Я просмотрел несколько руководств по монаде State и, кажется, у меня появилась идея. Например, как в этом прекрасном руководстве : import Data.Word type LCGState = Word32 lcg :: LCGState -> (Integer, LCGState) lcg s0 = (output, s1) where s1 = 1103515245 * s0 + 12345 output...

58
голосов
5ответов
20955 просмотров

scala Iterable # map против Iterable # flatMap

В чем разница между функциями map и flatMap в Iterable?

12
голосов
3ответов
879 просмотров

Как «получить» на самом деле / ​​получить / начальное состояние в Haskell?

У меня есть функция: test :: String -> State String String test x = get >>= \test -> let test' = x ++ test in put test' >> get >>= \test2 -> put (test2 ++ x) >> return "test" Я хорошо понимаю, что происходит в этой функции, и начинаю п...

33
голосов
5ответов
32026 просмотров

Есть ли в Haskell переменные?

Я часто слышал утверждения, что в Haskell нет переменных; в частности, этот ответ утверждает, что это не так. t, за него проголосовали не менее девяти раз и он был принят. Так есть переменные или нет и почему? Похоже, что этот вопрос также относится к ML, F #, OCaml, Erlang, Oz, Lava и в...

6
голосов
1ответов
3826 просмотров

Обработка ошибок в Haskell с монадой Either

У меня есть функция, которая проверяет, является ли тип подтипом другого типа: st :: Monad m => Map String Type -- ^type environment -> Set (Type, Type) -- ^assumed subtypes -> (Type, Type) -- ^we are checking if lhs <: rhs -> m (Set (Type, Type)) Я хочу зан...

57
голосов
2ответов
19780 просмотров

Haskell: нельзя использовать "map putStrLn"?

У меня есть список строк, и я пробовал это: ls = [ "banana", "mango", "orange" ] main = do map PutStrLn list_of_strings Это не сработало, и я не могу понять почему. ghc print-list.hs print-list.hs:3:0: Couldn't match expected type `IO t' against inferred type `[IO ()]' ...

21
голосов
8ответов
2780 просмотров

Каков убедительный сценарий использования монад в C #

Позвольте мне сразу заявить, что у меня инфантильное понимание Монад. Я прочитал здесь различные темы о монадах и провел несколько часов по изучению этой концепции. Мне вряд ли нравится этот термин, но я думаю, можно с уверенностью сказать, что я в целом понимаю, что такое / делает монада. ...

9
голосов
4ответов
2569 просмотров

В чем разница между монадой и замыканием?

Я немного запутался, читая определение между ними. Могут ли они действительно пересекаться по определению? или я совсем потерялся? Спасибо.

3
голосов
3ответов
441 просмотров

Выражение вычисления не выполняется Let

Я использую F # v 1.9.6.2 и определил очень простое вычислительное выражение: type MaybeBuilder() = member this.Let(x, f) = printfn "this.Let: %A" x this.Bind(Some x, f) member this.Bind(x, f) = printfn "this.Bind: %A" x match x with | Some(x) w...

192
голосов
6ответов
31065 просмотров

Что такое монада в C #?

В наши дни много говорят о монадах. Я прочитал несколько статей / сообщений в блогах, но не могу зайти достаточно далеко с их примерами, чтобы полностью понять концепцию. Причина в том, что монады являются концепцией функционального языка, и поэтому примеры приведены на языках, с которыми я не р...

5
голосов
3ответов
1071 просмотров

Haskell: как передать содержимое одного дескриптора другому в реальном времени

Я пишу программу, которая запускает внешний подпроцесс в интерактивном режиме, и мне нужно, чтобы содержимое дескриптора вывода выводилось на стандартный вывод, как только оно становится доступным. Я пробовал что-то вроде этого: main = do processInfo <- createProcess (proc "ghci" []){std_o...

17
голосов
5ответов
4220 просмотров

Являются ли продолжениями монадами?

Можно ли сказать, что продолжения являются монадами? Являются ли они подмножеством монад или просто способом реализации монад? Изменить: Или, может быть, я ошибся и монады - более абстрактное понятие, чем продолжения ? (Так что здесь я действительно сравниваю яблоки с апельсинами)

60
голосов
8ответов
13637 просмотров

Использование монады состояния Haskell запах кода?

Боже, я ненавижу термин "запах кода", но я не могу придумать ничего более точного. Я разрабатываю язык высокого уровня и компилятор для пробелов в свободное время. чтобы узнать о конструкции компилятора, дизайне языка и функциональном программировании (компилятор пишется на Haskell). На ...

4
голосов
4ответов
978 просмотров

Есть ли хорошие примеры использования монадных функций Haskell?

Монадные функции Haskell непросто понять, где я могу найти примеры использования?

52
голосов
8ответов
5043 просмотров

Творческое использование монад

Я ищу возможности творческого использования монад, чтобы учиться. Я где-то читал, что монады использовались, например, в ИИ, но, будучи новичком в монаде, я не понимаю, как это сделать. Пожалуйста, включите ссылку на исходный код и примеры использования. Нет стандартных монад пожалуйста.

15
голосов
4ответов
2349 просмотров

Должен ли язык, реализующий монады, быть статически типизированным?

Я изучаю стиль функционального программирования. В Не бойтесь монад , Брайан Бекман блестяще представил Монаду. Он упомянул, что Monad - это композиция функций для решения проблемы сложности. Монада включает функцию unit, которая переводит тип T в усиленный тип M (T); и функция Bind, кото...

15
голосов
3ответов
2195 просмотров

Ограничение монады классом типа

Есть ли в Haskell способ ограничить монаду M a так, чтобы a удовлетворял ограничению класса типа? Я перевожу пример вероятностного моделирования с F # на Haskell . Однако в Haskell я пропустил support, потому что это изменило бы data Distribution a на data (Ord a) => Distribution a. С...

24
голосов
2ответов
15178 просмотров

Синтаксис Haskell для выражения case в блоке do

Я не могу понять эту синтаксическую проблему с выражением case в блоке do. Каков правильный синтаксис? Если бы вы могли исправить мой пример и объяснить его, это было бы лучше всего. module Main where main = do putStrLn "This is a test" s <- foo putStrLn s foo ...