home.social

#ghci — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #ghci, aggregated by home.social.

  1. CW: Налаштування GHCI, інтерпритатора :haskell:

    Під час вивчання Haskell, та й, мабуть, під час роботи з ним, часто використовується інтерпретатор. На жаль, за замовчуванням він не дуже зручний, але частково ми можемо виправити це простими налаштуваннями.

    Всі налаштування робляться через його команду :set. До прикладу, часто може знадобитися переглядати типи функцій, чи їхніх значень після виконання. Робиться це командою :type передаючи певну конструкцію, але можна увімкнути автоматичний друк типів при виконанні кожної інструкції командою :set +t. Після цього виконання буде виглядати так:

    ghci> 4
    4
    it :: Num a => a
    ghci> 'N'
    'N'
    it :: Char
    ghci> 2 + 2 * 4
    10
    it :: Num a => a
    

    Тепер нам не потрібно виконувати окремі команди, щоб побачити значення та тип результату.

    Також можна змінити підказку (prompt) щоб не дивитись кожнісінький раз на те що ми й так знаємо, а саме що ми у ghci.

    ghci> :set prompt "> "
    > "It's a String"
    "It's a String"
    it :: String
    >
    

    Це вже краще, але далеко до ідеалу, тому додамо ще якусь корисну інформацію, окрім прибирання зайвої, наприклад номер рядка й завантажений модуль.

    > :set prompt "[%l] %s> "
    [7] Prelude>
    

    Так вже цікавіше.

    Є ще одна штучка котра може нам іноді знадобитись при тестах.

    [1] Prelude> f = do
    
    <interactive>:1:5: error: [GHC-82311]
        Empty 'do' block
        Suggested fix: Perhaps you intended to use NondecreasingIndentation
    [2] Prelude> :set +m
    [3] Prelude> f = do
    ghci|   putStrLn "Привіт всім хаскелятам та хаскелищам!"
    ghci|
    [6] Prelude> f
    Привіт всім хаскелятам та хаскелищам!
    [7] Prelude>
    

    :set +m дозволяє писати багато рядкові конструкції.

    Це все добре, але після перезапуску, всі налаштування загубляться у просторі всесвіту й ви втратите свої персональні налаштунки, а допомагає уникнути цього .ghci файл у домашній теці, або у поточній. Просто запишіть у нього всі необхідні команди й ви спаслись.

    #ukrhaskell #haskell #ghci #налаштування #prompt #set

  2. CW: Налаштування GHCI, інтерпритатора :haskell:

    Під час вивчання Haskell, та й, мабуть, під час роботи з ним, часто використовується інтерпретатор. На жаль, за замовчуванням він не дуже зручний, але частково ми можемо виправити це простими налаштуваннями.

    Всі налаштування робляться через його команду :set. До прикладу, часто може знадобитися переглядати типи функцій, чи їхніх значень після виконання. Робиться це командою :type передаючи певну конструкцію, але можна увімкнути автоматичний друк типів при виконанні кожної інструкції командою :set +t. Після цього виконання буде виглядати так:

    ghci> 4
    4
    it :: Num a => a
    ghci> 'N'
    'N'
    it :: Char
    ghci> 2 + 2 * 4
    10
    it :: Num a => a
    

    Тепер нам не потрібно виконувати окремі команди, щоб побачити значення та тип результату.

    Також можна змінити підказку (prompt) щоб не дивитись кожнісінький раз на те що ми й так знаємо, а саме що ми у ghci.

    ghci> :set prompt "> "
    > "It's a String"
    "It's a String"
    it :: String
    >
    

    Це вже краще, але далеко до ідеалу, тому додамо ще якусь корисну інформацію, окрім прибирання зайвої, наприклад номер рядка й завантажений модуль.

    > :set prompt "[%l] %s> "
    [7] Prelude>
    

    Так вже цікавіше.

    Є ще одна штучка котра може нам іноді знадобитись при тестах.

    [1] Prelude> f = do
    
    <interactive>:1:5: error: [GHC-82311]
        Empty 'do' block
        Suggested fix: Perhaps you intended to use NondecreasingIndentation
    [2] Prelude> :set +m
    [3] Prelude> f = do
    ghci|   putStrLn "Привіт всім хаскелятам та хаскелищам!"
    ghci|
    [6] Prelude> f
    Привіт всім хаскелятам та хаскелищам!
    [7] Prelude>
    

    :set +m дозволяє писати багато рядкові конструкції.

    Це все добре, але після перезапуску, всі налаштування загубляться у просторі всесвіту й ви втратите свої персональні налаштунки, а допомагає уникнути цього .ghci файл у домашній теці, або у поточній. Просто запишіть у нього всі необхідні команди й ви спаслись.

    #ukrhaskell #haskell #ghci #налаштування #prompt #set

  3. CW: Налаштування GHCI, інтерпритатора :haskell:

    Під час вивчання Haskell, та й, мабуть, під час роботи з ним, часто використовується інтерпретатор. На жаль, за замовчуванням він не дуже зручний, але частково ми можемо виправити це простими налаштуваннями.

    Всі налаштування робляться через його команду :set. До прикладу, часто може знадобитися переглядати типи функцій, чи їхніх значень після виконання. Робиться це командою :type передаючи певну конструкцію, але можна увімкнути автоматичний друк типів при виконанні кожної інструкції командою :set +t. Після цього виконання буде виглядати так:

    ghci> 4
    4
    it :: Num a => a
    ghci> 'N'
    'N'
    it :: Char
    ghci> 2 + 2 * 4
    10
    it :: Num a => a
    

    Тепер нам не потрібно виконувати окремі команди, щоб побачити значення та тип результату.

    Також можна змінити підказку (prompt) щоб не дивитись кожнісінький раз на те що ми й так знаємо, а саме що ми у ghci.

    ghci> :set prompt "> "
    > "It's a String"
    "It's a String"
    it :: String
    >
    

    Це вже краще, але далеко до ідеалу, тому додамо ще якусь корисну інформацію, окрім прибирання зайвої, наприклад номер рядка й завантажений модуль.

    > :set prompt "[%l] %s> "
    [7] Prelude>
    

    Так вже цікавіше.

    Є ще одна штучка котра може нам іноді знадобитись при тестах.

    [1] Prelude> f = do
    
    <interactive>:1:5: error: [GHC-82311]
        Empty 'do' block
        Suggested fix: Perhaps you intended to use NondecreasingIndentation
    [2] Prelude> :set +m
    [3] Prelude> f = do
    ghci|   putStrLn "Привіт всім хаскелятам та хаскелищам!"
    ghci|
    [6] Prelude> f
    Привіт всім хаскелятам та хаскелищам!
    [7] Prelude>
    

    :set +m дозволяє писати багато рядкові конструкції.

    Це все добре, але після перезапуску, всі налаштування загубляться у просторі всесвіту й ви втратите свої персональні налаштунки, а допомагає уникнути цього .ghci файл у домашній теці, або у поточній. Просто запишіть у нього всі необхідні команди й ви спаслись.

    #ukrhaskell #haskell #ghci #налаштування #prompt #set

  4. Was soll das für function composition sein, wenn nicht mal

    | (compose flip flip) == identity

    stimmt und mir dafür Arity-Error entgegen wirft.

    Kurz in #ghci geprüft, und glücklich geworden.

    #Racket #DrRacket #Scheme #Haskell

  5. Was soll das für function composition sein, wenn nicht mal

    | (compose flip flip) == identity

    stimmt und mir dafür Arity-Error entgegen wirft.

    Kurz in #ghci geprüft, und glücklich geworden.

    #Racket #DrRacket #Scheme #Haskell

  6. Was soll das für function composition sein, wenn nicht mal

    | (compose flip flip) == identity

    stimmt und mir dafür Arity-Error entgegen wirft.

    Kurz in #ghci geprüft, und glücklich geworden.

    #Racket #DrRacket #Scheme #Haskell

  7. Was soll das für function composition sein, wenn nicht mal

    | (compose flip flip) == identity

    stimmt und mir dafür Arity-Error entgegen wirft.

    Kurz in #ghci geprüft, und glücklich geworden.

    #Racket #DrRacket #Scheme #Haskell

  8. CW: Швидкий запуск програми на :haskell:

    Під час розробки часто потрібно перезапускати програму перевіряючи її поведінку. Але робити це за допомоги інтерпретатора ghci запускаючи функцію не завжди зручно, та й збирати компілятором ghc і запускати бінарник також. Тому для зручності було зроблено runghc. Це команда яка компілює код і зразу його виконує не зберігаючи у файл.

    $ runghc main.hs
    

    #ukrhaskell #haskell #ghc #ghci #runghc #запуск #програмування

  9. CW: Швидкий запуск програми на :haskell:

    Під час розробки часто потрібно перезапускати програму перевіряючи її поведінку. Але робити це за допомоги інтерпретатора ghci запускаючи функцію не завжди зручно, та й збирати компілятором ghc і запускати бінарник також. Тому для зручності було зроблено runghc. Це команда яка компілює код і зразу його виконує не зберігаючи у файл.

    $ runghc main.hs
    

    #ukrhaskell #haskell #ghc #ghci #runghc #запуск #програмування

  10. CW: Створення операторів і стандартні оператори :haskell:.

    У Haskell можна оголошувати свої оператори. Вони можуть складатись з одного або кількох символів. Дозволяються наступні символи ~!?.@#$%^&*-<=>+\|/. Також можна використовувати символ :, але він повинен розташовуватись у середині або кінці, не на початку.

    Оголошуються оператори в синтаксисі схожому на виклик

    x *+* y = x^2 + y^2
    

    або можна використати префіксну форму

    (*+*) x y = x^2 + y^2
    

    Примітка: Функції можна оголошувати в інфіксній формі.


    ЗВЕРНІТЬ УВАГУ!: Усі оператори є бінарні окрім унарного мінуса який обовʼязково обгортають в круглі дужки.

    Усі оператори мають пріоритети для правильної роботи, саме за їхньої допомоги вираз 2 + 2 * 2 вичислюється правильно й результат дорівнюватиме 6, а не 8. Є десять рівнів пріоритету від нуля до девʼяти.

    Але що робити з кількома операторами якщо у них один пріоритет, це може бути кілька викликів одного оператора. Тут потрібно використати асоціативність. Є два види асоціативності ліва і права. Ліва асоціативність це коли оператори застосовуються по черзі зліва на право, а права навпаки.

    (2 + 1) - 5 -- ліва
    2 + (1 - 5) -- права
    

    Оголошується асоціативність оператора за допомоги ключових слів:

    • infixl - ліва
    • infixr - права
    • infix - відсутня

    Якщо асоціативність відсутня, то такий оператор не можна викликати кілька раз або з іншими операторами того ж пріоритету в одному виразі.

    Вказується асоціація і пріоритет у такому синтаксисі infix[rl] <prio> <operator>. Вказується це, або до, або після оголошення самого оператора, але в інтерпретаторі це мусе бути одним рядком, тому їх потрібно розділити крапкою з комою.

    infixl 7 +**
    a +** b = a^2 + b^2
    

    Якщо цього не вказати, то оператор матиме ліву асоціативність і девʼятий, найвищий, пріоритет.

    Дізнатись цю інформацію про оператор можна за допомоги команди інтерпретатора info.

    ghci> infixl 7 +**; (+**) a b = a^2 + b^2
    ghci> 5 +** 4
    41
    ghci> :i (+**)
    (+**) :: Num a => a -> a -> a 	-- Defined at <interactive>:1:15
    infixl 7 +**
    

    Якщо явно не вказати infix, то й у виводі цієї команди не буде такої інформації.

    У Haskell немає вбудованих операторів. Всі стандартні оператори оголошені в стандартній бібліотеці. Є такі стандартні оператори.

    infixr 8   ^, ``
    infixl 7   *, /, `div`, `mod`
    infixl 6   +, -
    infix  4   ==, /=, <, <=, >=, >
    

    Це не всі, але інші ми розглянемо пізніше. Оператор `` це оператор виклику функції в інфіксному форматі. Виклик функції у префіксному вигляді має праву асоціативність і девʼятий пріоритет.

    /= це оператор не рівності, в інших мовах зазвичай він виглядає !=. Оператори порівняння не мають асоціативності, тому їх не можна обʼєднувати в ланцюжок.

    #програмування #haskell #hs #оператори #створення #оголошення #асоціативність #пріоритети #стандартні #стандартна #бібліотека #інтерпретатор #ghci #infix #infixl #infixr #виклик #функції #функцій #префіксна #інфіксна #форми

  11. CW: Створення операторів і стандартні оператори :haskell:.

    У Haskell можна оголошувати свої оператори. Вони можуть складатись з одного або кількох символів. Дозволяються наступні символи ~!?.@#$%^&*-<=>+\|/. Також можна використовувати символ :, але він повинен розташовуватись у середині або кінці, не на початку.

    Оголошуються оператори в синтаксисі схожому на виклик

    x *+* y = x^2 + y^2
    

    або можна використати префіксну форму

    (*+*) x y = x^2 + y^2
    

    Примітка: Функції можна оголошувати в інфіксній формі.


    ЗВЕРНІТЬ УВАГУ!: Усі оператори є бінарні окрім унарного мінуса який обовʼязково обгортають в круглі дужки.

    Усі оператори мають пріоритети для правильної роботи, саме за їхньої допомоги вираз 2 + 2 * 2 вичислюється правильно й результат дорівнюватиме 6, а не 8. Є десять рівнів пріоритету від нуля до девʼяти.

    Але що робити з кількома операторами якщо у них один пріоритет, це може бути кілька викликів одного оператора. Тут потрібно використати асоціативність. Є два види асоціативності ліва і права. Ліва асоціативність це коли оператори застосовуються по черзі зліва на право, а права навпаки.

    (2 + 1) - 5 -- ліва
    2 + (1 - 5) -- права
    

    Оголошується асоціативність оператора за допомоги ключових слів:

    • infixl - ліва
    • infixr - права
    • infix - відсутня

    Якщо асоціативність відсутня, то такий оператор не можна викликати кілька раз або з іншими операторами того ж пріоритету в одному виразі.

    Вказується асоціація і пріоритет у такому синтаксисі infix[rl] <prio> <operator>. Вказується це, або до, або після оголошення самого оператора, але в інтерпретаторі це мусе бути одним рядком, тому їх потрібно розділити крапкою з комою.

    infixl 7 +**
    a +** b = a^2 + b^2
    

    Якщо цього не вказати, то оператор матиме ліву асоціативність і девʼятий, найвищий, пріоритет.

    Дізнатись цю інформацію про оператор можна за допомоги команди інтерпретатора info.

    ghci> infixl 7 +**; (+**) a b = a^2 + b^2
    ghci> 5 +** 4
    41
    ghci> :i (+**)
    (+**) :: Num a => a -> a -> a 	-- Defined at <interactive>:1:15
    infixl 7 +**
    

    Якщо явно не вказати infix, то й у виводі цієї команди не буде такої інформації.

    У Haskell немає вбудованих операторів. Всі стандартні оператори оголошені в стандартній бібліотеці. Є такі стандартні оператори.

    infixr 8   ^, ``
    infixl 7   *, /, `div`, `mod`
    infixl 6   +, -
    infix  4   ==, /=, <, <=, >=, >
    

    Це не всі, але інші ми розглянемо пізніше. Оператор `` це оператор виклику функції в інфіксному форматі. Виклик функції у префіксному вигляді має праву асоціативність і девʼятий пріоритет.

    /= це оператор не рівності, в інших мовах зазвичай він виглядає !=. Оператори порівняння не мають асоціативності, тому їх не можна обʼєднувати в ланцюжок.

    #програмування #haskell #hs #оператори #створення #оголошення #асоціативність #пріоритети #стандартні #стандартна #бібліотека #інтерпретатор #ghci #infix #infixl #infixr #виклик #функції #функцій #префіксна #інфіксна #форми

  12. CW: Типи в :haskell:

    Haskell є строго статично типізованою мовою програмування, але з можливістю автоматичного виведення типів. В усіх наших попередніх програмах ми ніде не вказували типи, компілятор чи інтерпретатор їх вивів автоматично, полегшивши нам написання коду. Але не завжди це у нього буде вдаватись, і взагалі знати типи даних обовʼязково потрібно.

    Статично типізований означає що перевірка типів відбувається на етапі компіляції, а не виконання. Строга типізація означає що не явного приведення типів не відбувається, можливо тільки явно вказувати приведення.

    Щоб дізнатись тип функції чи оператора в інтерпретаторі ghci потрібно використати команду інтерпретатора type. Всі команди інтерпретатора починаються з символу двокрапки. Виглядає це так :type x.

    let x = 10
    :type x
    

    Команди інтерпретатора можна скорочувати до першої літери, але тільки якщо не відбувається колізії. Тому :type і :t одне і теж.

    Ця команда поверне нам

    x :: Num p => p
    

    У цьому рядку оператор :: схожий на =, але працює з типами, а не значеннями. За допомогою нього ми зможемо самі вказувати типи. Зліва від нього знаходиться вираз, а з права його тип. Що означає права частина у цьому випадку ми розберемо згодом, а зараз подивимось на те як уточнювати тип самостійно.

    let x = 10 :: Int
    

    Тут ми явно вказуємо тип за допомоги оператора типізації. Тепер команда типу :t x поверне нам таке x :: Int.

    Є шість основних, фундаментальних типів.

    • Bool - Логічний (True, False)
    • Char - Символьний ('\0' - '\1114111')
    • Int - Знаковий цілочисельний (-9223372036854775808 - 9223372036854775807)
    • Integer - Знаковий цілочисельний без обмежень)
    • Float - Знаковий дробовий
    • Double - Знаковий дробовий з подвійною точністю

    Перейдімо від констант до функцій. Для прикладу візьмемо стандартну функцію not. Вона приймає bool і повертає інвертоване значення типу bool.

    not True  -- Поверне False
    not False -- Поверне True
    

    Тепер розберемо його тип

    :t not
    not :: Bool -> Bool
    

    У цьому випадку функція приймає один аргумент і саме його тип вказаний перед стрілкою, а після неї тип повернення. Але якщо буде кілька вхідних аргументів, то вони всі будуть переліченні через стрілки.

    Для прикладу візьмемо оператор &&. Щоб подивитись тип оператора потрібно взяти його у душки :t (&&).

    (&&) :: Bool -> Bool -> Bool
    

    Перші два Bool це вхідні аргументи, а останній тип повернення. Саме через такі типи працює часткове застосування функцій. Візьмем (&& True) і побачимо що тип його (&& True) :: Bool -> Bool. Розташування аргументу значення не має.

    #програмування #haskell #типи #типізація #статична #строга #фукції #оператори #інтерпретатор #ghci #команди #type #types #typing #static #константи

  13. CW: Типи в :haskell:

    Haskell є строго статично типізованою мовою програмування, але з можливістю автоматичного виведення типів. В усіх наших попередніх програмах ми ніде не вказували типи, компілятор чи інтерпретатор їх вивів автоматично, полегшивши нам написання коду. Але не завжди це у нього буде вдаватись, і взагалі знати типи даних обовʼязково потрібно.

    Статично типізований означає що перевірка типів відбувається на етапі компіляції, а не виконання. Строга типізація означає що не явного приведення типів не відбувається, можливо тільки явно вказувати приведення.

    Щоб дізнатись тип функції чи оператора в інтерпретаторі ghci потрібно використати команду інтерпретатора type. Всі команди інтерпретатора починаються з символу двокрапки. Виглядає це так :type x.

    let x = 10
    :type x
    

    Команди інтерпретатора можна скорочувати до першої літери, але тільки якщо не відбувається колізії. Тому :type і :t одне і теж.

    Ця команда поверне нам

    x :: Num p => p
    

    У цьому рядку оператор :: схожий на =, але працює з типами, а не значеннями. За допомогою нього ми зможемо самі вказувати типи. Зліва від нього знаходиться вираз, а з права його тип. Що означає права частина у цьому випадку ми розберемо згодом, а зараз подивимось на те як уточнювати тип самостійно.

    let x = 10 :: Int
    

    Тут ми явно вказуємо тип за допомоги оператора типізації. Тепер команда типу :t x поверне нам таке x :: Int.

    Є шість основних, фундаментальних типів.

    • Bool - Логічний (True, False)
    • Char - Символьний ('\0' - '\1114111')
    • Int - Знаковий цілочисельний (-9223372036854775808 - 9223372036854775807)
    • Integer - Знаковий цілочисельний без обмежень)
    • Float - Знаковий дробовий
    • Double - Знаковий дробовий з подвійною точністю

    Перейдімо від констант до функцій. Для прикладу візьмемо стандартну функцію not. Вона приймає bool і повертає інвертоване значення типу bool.

    not True  -- Поверне False
    not False -- Поверне True
    

    Тепер розберемо його тип

    :t not
    not :: Bool -> Bool
    

    У цьому випадку функція приймає один аргумент і саме його тип вказаний перед стрілкою, а після неї тип повернення. Але якщо буде кілька вхідних аргументів, то вони всі будуть переліченні через стрілки.

    Для прикладу візьмемо оператор &&. Щоб подивитись тип оператора потрібно взяти його у душки :t (&&).

    (&&) :: Bool -> Bool -> Bool
    

    Перші два Bool це вхідні аргументи, а останній тип повернення. Саме через такі типи працює часткове застосування функцій. Візьмем (&& True) і побачимо що тип його (&& True) :: Bool -> Bool. Розташування аргументу значення не має.

    #програмування #haskell #типи #типізація #статична #строга #фукції #оператори #інтерпретатор #ghci #команди #type #types #typing #static #константи

  14. GHCiTUI Update: Modules, Tracing, Resizing, Speed Ups! Also please help by endorsing me on Hackage.

    It's been a while since I've given an update on this project.

    The project is now open source (github.com/CrystalSplitter/ghc)

    And hopefully in the next few weeks it'll be on Hackage! You can help me if you're a Hackage maintainer by endorsing me: hackage.haskell.org/user/Cryst

    #haskell #ghc #ghcitui #ghci #programming #opensource

  15. GHCiTUI Update: Modules, Tracing, Resizing, Speed Ups! Also please help by endorsing me on Hackage.

    It's been a while since I've given an update on this project.

    The project is now open source (github.com/CrystalSplitter/ghc)

    And hopefully in the next few weeks it'll be on Hackage! You can help me if you're a Hackage maintainer by endorsing me: hackage.haskell.org/user/Cryst

    #haskell #ghc #ghcitui #ghci #programming #opensource

  16. GHCiTUI Update: Modules, Tracing, Resizing, Speed Ups! Also please help by endorsing me on Hackage.

    It's been a while since I've given an update on this project.

    The project is now open source (github.com/CrystalSplitter/ghc)

    And hopefully in the next few weeks it'll be on Hackage! You can help me if you're a Hackage maintainer by endorsing me: hackage.haskell.org/user/Cryst

    #haskell #ghc #ghcitui #ghci #programming #opensource

  17. GHCiTUI Update: Modules, Tracing, Resizing, Speed Ups! Also please help by endorsing me on Hackage.

    It's been a while since I've given an update on this project.

    The project is now open source (github.com/CrystalSplitter/ghc)

    And hopefully in the next few weeks it'll be on Hackage! You can help me if you're a Hackage maintainer by endorsing me: hackage.haskell.org/user/Cryst

    #haskell #ghc #ghcitui #ghci #programming #opensource

  18. GHCiTUI Update: Modules, Tracing, Resizing, Speed Ups! Also please help by endorsing me on Hackage.

    It's been a while since I've given an update on this project.

    The project is now open source (github.com/CrystalSplitter/ghc)

    And hopefully in the next few weeks it'll be on Hackage! You can help me if you're a Hackage maintainer by endorsing me: hackage.haskell.org/user/Cryst

    #haskell #ghc #ghcitui #ghci #programming #opensource

  19. I've been working on a #Haskell #GHCi TUI, and I just got the interface of it working! I like being able to step and jump around with hotkeys, it's so neat.

  20. I've been working on a #Haskell #GHCi TUI, and I just got the interface of it working! I like being able to step and jump around with hotkeys, it's so neat.

  21. I've been working on a #Haskell #GHCi TUI, and I just got the interface of it working! I like being able to step and jump around with hotkeys, it's so neat.

  22. I've been working on a #Haskell #GHCi TUI, and I just got the interface of it working! I like being able to step and jump around with hotkeys, it's so neat.

  23. I've been working on a #Haskell #GHCi TUI, and I just got the interface of it working! I like being able to step and jump around with hotkeys, it's so neat.

  24. Try getting #haskell's #cabal or #stack to run on that iMac. I got cabal 3.2 installed, but it refuses to run: it crashes with "illegal instruction 4". Luckily #ghc 8.8.3 and its #ghci run just fine. Installing stack failed, but it did manage to load a bunch of much-needed packages, so I can work on my projects. I guess I have to learn how to load packages without cabal or stack... :(

  25. Try getting #haskell's #cabal or #stack to run on that iMac. I got cabal 3.2 installed, but it refuses to run: it crashes with "illegal instruction 4". Luckily #ghc 8.8.3 and its #ghci run just fine. Installing stack failed, but it did manage to load a bunch of much-needed packages, so I can work on my projects. I guess I have to learn how to load packages without cabal or stack... :(

  26. Try getting #haskell's #cabal or #stack to run on that iMac. I got cabal 3.2 installed, but it refuses to run: it crashes with "illegal instruction 4". Luckily #ghc 8.8.3 and its #ghci run just fine. Installing stack failed, but it did manage to load a bunch of much-needed packages, so I can work on my projects. I guess I have to learn how to load packages without cabal or stack... :(

  27. Try getting #haskell's #cabal or #stack to run on that iMac. I got cabal 3.2 installed, but it refuses to run: it crashes with "illegal instruction 4". Luckily #ghc 8.8.3 and its #ghci run just fine. Installing stack failed, but it did manage to load a bunch of much-needed packages, so I can work on my projects. I guess I have to learn how to load packages without cabal or stack... :(

  28. By Odin, it worked! Installing #GHC 8.8.3 for #haskell means it was possible to successfully install the #Cabal package manager, which means the #HDBC and #HDBCOdbc packages could get downloaded from #Hackage, and this time #GHCI did not complain about a missing libHSold-locale library! wOOt!

  29. By Odin, it worked! Installing #GHC 8.8.3 for #haskell means it was possible to successfully install the #Cabal package manager, which means the #HDBC and #HDBCOdbc packages could get downloaded from #Hackage, and this time #GHCI did not complain about a missing libHSold-locale library! wOOt!

  30. So here's something interesting about #Microsoft's #WSL: I can run #ghci, kick off a lengtht process, then shut down the WSL instance in which it started, and then ghci keeps running. How odd is that?

  31. So here's something interesting about #Microsoft's #WSL: I can run #ghci, kick off a lengtht process, then shut down the WSL instance in which it started, and then ghci keeps running. How odd is that?

  32. Hey, #haskell programmers, how do I stop #ghci executing when I have it executing an infinite loop? Running inside #WSL. Didn't respond to ^c or :q. I shut down the WSL instance but that didn't cut the CPU usage...

  33. Hey, #haskell programmers, how do I stop #ghci executing when I have it executing an infinite loop? Running inside #WSL. Didn't respond to ^c or :q. I shut down the WSL instance but that didn't cut the CPU usage...

  34. #TIL: #Hugs for #haskell does read literal scripts, but #GHCI does not. Woe is me: ghci is the norm.

  35. #TIL: #Hugs for #haskell does read literal scripts, but #GHCI does not. Woe is me: ghci is the norm.

  36. Who here uses #IDEOne to write and compile #Haskell computer software source code? It behaves different from the #GHCI, which makes it difficult to follow all kinds of tutorials. Drop me a hint, please?

  37. Who here uses #IDEOne to write and compile #Haskell computer software source code? It behaves different from the #GHCI, which makes it difficult to follow all kinds of tutorials. Drop me a hint, please?