I’m trying to implement the small glitch art program from this haskell textbook (on pdf page 312 / book page 297) in prolog.
It requires running haskell’s readFile function from Data.ByteString.Char8, which “Read an entire file strictly into a ByteString.”
I’ve tried a few different things but can’t seem to get it to work. ChatGPT said the equivalent is read_file_to_string/3 so I ran read_file_to_string('lovecraft.jpg',Love,[]).
but the output, which is supposed to look like
ghci> BC.readFile "lovecraft.jpg"
"\255\216\255\224\NUL\DLEJFIF\NUL\SOH\SOH\SOH\NUL`\NUL`\NUL\NUL\255\225\NULfExif\NUL\NULMM\NUL*\NUL\NUL\NUL\b\NUL\ACK\SOH\DC2\NUL\ETX\NUL\NUL\NUL\SOH\NUL\SOH\NUL\NUL\ETX\SOH\NUL\ENQ\NUL\NUL\NUL\SOH\NUL\NUL\NULV\ETX\ETX\NUL\SOH\NUL\NUL\NUL\SOH\NUL\NUL\NUL\NULQ\DLE\NUL\SOH\NUL\NUL\NUL\SOH\SOH\NUL\NUL\NULQ\DC1\NUL\EOT\NUL\NUL\NUL\SOH\NUL\NUL\SO\195Q\DC2\NUL\EOT\NUL\NUL\NUL\SOH\NUL\NUL\SO\195\NUL\NUL\NUL\NUL\NUL\SOH\134\160\NUL\NUL\177\143\255\219\NULC\NUL\STX\SOH\SOH\STX\SOH\SOH\STX\STX\STX\STX\STX\STX\STX\STX\ETX\ENQ\ETX\ETX\ETX\ETX\ETX\ACK\EOT\EOT\ETX\ENQ\a\ACK\a\a\a\ACK\a\a\b\t\v\t\b\b\n\b\a\a\n\r\n\n\v\f\f\f\f\a\t\SO\SI\r\f\SO\v\f\f\f\255\219\NULC\SOH\STX\STX\STX\ETX\ETX\ETX\ACK\ETX\ETX\ACK\f\b\a\b\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\255\192\NUL\DC1\b\STXt\STX\NUL\ETX\SOH\"\NUL\STX\DC1\SOH\ETX\DC1\SOH\255\196\NUL\US\NUL\NUL\SOH\ENQ\SOH\SOH\SOH\SOH\SOH\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SOH\STX\ETX\EOT\ENQ\ACK\a\b\t\n\v\255\196\NUL\181\DLE\NUL\STX\SOH\ETX\ETX\STX\EOT\ETX\ENQ\ENQ\EOT\EOT\NUL\NUL\SOH}\SOH\STX\ETX\NUL\EOT\DC1\ENQ\DC2!1A\ACK\DC3Qa\a\"q\DC42\129\145\161\b#B\177\193\NAKR\209\240$3br\130\t\n\SYN\ETB\CAN\EM\SUB%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\131\132\133\134\135\136\137\138\146\147\148\149\150\151\152\153\154\162\163\164\165\166\167\168\169\170\178\179\180\181\182\183\184\185\186\194\195\196\197\198\199\200\201\202\210\211\212\213\214\215\216\217\218\225\226\227\228\229\230\231\232\233\234\241\242\243\244\245\246\247\248\249\250\255\196\NUL\US\SOH\NUL\ETX\SOH\SOH\SOH\SOH\SOH\SOH\SOH\SOH\SOH\NUL\NUL\NUL\NUL\NUL\NUL\SOH\STX\ETX\EOT\ENQ\ACK\a\b\t\n\v\255\196\NUL\181\DC1\NUL\STX\SOH\STX\EOT\EOT\ETX\EOT\a\ENQ\EOT\EOT\NUL\SOH\STXw\NUL\SOH\STX\ETX\DC1\EOT\ENQ!1\ACK\DC2AQ\aaq\DC3\"2\129\b\DC4B\145\161\177\193\t#3R\240\NAKbr\209\n\SYN$4\225%\241\ETB\CAN\EM\SUB&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\130\131\132\133\134\135\136\137
seems wrong, getting
Love = "����\u0000\u0010JFIF\u0000\u0001\u0001\u0001\u0000`\u0000`\u0000\u0000��\u0000fExif\u0000\u0000MM\u0000*\u0000\u0000\u0000\b\u0000\u0006\u0001\u0012\u0000\u0003\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0003\u0001\u0000\u0005\u0000\u0000\u0000\u0001\u0000\u0000\u0000V\u0003\u0003\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000Q\u0010\u0000\u0001\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000Q\u0011\u0000\u0004\u0000\u0000\u0000\u0001\u0000\u0000\u000E�Q\u0012\u0000\u0004\u0000\u0000\u0000\u0001\u0000\u0000\u000E�\u0000\u0000\u0000\u0000\u0000\u0001��\u0000\u0000����\u0000C\u0000\u0002\u0001\u0001\u0002\u0001\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0003\u0005\u0003\u0003\u0003\u0003\u0003\u0006\u0004\u0004\u0003\u0005\a\u0006\a\a\a\u0006\a\a\b\t\v\t\b\b\n\b\a\a\n\r\n\n\v\f\f\f\f\a\t\u000E\u000F\r\f\u000E\v\f\f\f��\u0000C\u0001\u0002\u0002\u0002\u0003\u0003\u0003\u0006\u0003\u0003\u0006\f\b\a\b\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f��\u0000\u0011\b\u0002t\u0002\u0000\u0003\u0001\"\u0000\u0002\u0011\u0001\u0003\u0011\u0001��\u0000\u001F\u0000\u0000\u0001\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0004\u0005\u0006\a\b\t\n\v��\u0000�\u0010\u0000\u0002\u0001
and also I’m getting a “Illegal UTF-8 start” warning.
I also tried using read_string/3 and string_bytes/3.
How do you do this?